Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> 測試人員應當了解的Android 內存優化之圖片資源

測試人員應當了解的Android 內存優化之圖片資源

編輯:Android開發教程

測試人員應該了解的Android 內存優化之圖片資源

對比新舊版本的內存測試結果,我們發現新版本的內存占用提高了不少。借助MAT工具對APP占用內存進行分析發現占用APP內存資源最大的還是圖片資源,Bitmap對象。我們的開發人員主要在以下幾個方面進行了優化:

 

1、將部分默認圖片資源放置到更高屏幕分辨率文件夾(針對所有機型)。

 

2、使用純色的背景皮膚,取代APP原本的漸變色背景圖(針對低端機)。

 

3、延遲初始化圖片(針對低端機)。

 

4、禁用圓角處理(針對低端機)。

 

5、禁用Gif,由於Gif圖一般有很多幀的圖片構造,因此內存占用很大,同時需要不斷進行渲染,會導致卡頓與耗電(針對低端機)。

 

6、關閉動畫效果,動畫需要不斷的繪制,會導致界面卡頓與耗電(針對低端機)。

 

本文主要分析第一點優化措施背後涉及的技術原理。(其余的優化措施實際上是去掉了一些功能,犧牲部分功能換取更好的性能)

 

這裡涉及幾個基本概念:像素,分辨率,density,target density,indensity,ARGB8888,圖片資源所占用的內存空間的計算方法

 

像素:每張圖片都是由色點組成的,每個色點稱為一個像素。

 

分辨率:橫縱2個方向的像素點的數量,比如分辨率720*1280的意思是水平像素數為720個,垂直像素數1280個。在屏幕尺寸一樣的情況下,分辨率越高,顯示效果就越精細和細膩。

 

density值表示每英寸有多少個顯示點。它的單位是dpi:dot per inch,通常屏幕大時,density就大,屏幕小時,density就小。

 

inDensity表示被設定的圖像密度,決定這個值的是圖片所放置的文件目錄,比如drawable-hdpi、drawable-xhdpi等等,如果圖片放在drawable-hdpi下,inDensity=240,如果放在drawable-xhdpi下,inDensity=320。

密度 ldpi mdpi hdpi xhdpi xxhdpi 密度值 120 160 240 320 480 代表分辨率 240*320 320*480 480*800 720*1280 1080*1920

 

 

TargetDensity表示最終需要適配到的圖片密度,這個值由手機設備來決定,手機屏幕越高清這個值越大。

 

ARGB8888:Android設備上圖片都被處理成Bitmap對象。生成Bitmap有一個非常重要的參數Config,屬性值有ALPHA_8、RGB_565、ARGB_4444、ARGB_8888四種。不同的屬性值對應的圖片每個像素點占用內存大小不同,ALPHA_8每個像素占用1byte,RGB_565和ARGB_4444占用2byte,ARGB_8888占用4byte,其中ARGB_4444在高版本中已經廢棄。ARGB指的是一種色彩模式,裡面A代表Alpha(A值代表透明度,當 A == 0xff 時不透明,當 A == 0x00 時完全透明),R表示red,G表示green,B表示blue,ARGB分別占8bit即1byte,因此一個像素占4byte。

 

在Android中,在不同的屏幕密度下,加載同一套資源所占用的內存空間是不一樣的,Android在加載默認圖資源時會根據資源所在的文件對應的像素密度以及自身像素密度比例縮放,具體公式如下(默認ARGB8888) :

BitmapSize = 4* WIDTH * (TargetDensity  /  inDensity)*HEIGHT *  (TargetDensity /  inDensity) 

 

假設一個Android APP的默認圖片資源放在xhdpi下,在一台720*1280分辨率的手機上,加載到內存中的大小是4*720*1280=3.5MB,但是在一台1080*1920分辨率的手機上,加載到內存中的大小是4*720*(480/320)*1280*(480/320)= 7.1MB。可以看出將圖片放到不同分辨率文件夾下,在不同density手機下加載到內存所占大小相差很多,因此圖片放置的目錄一定要慎重。我們可以將APP中一些較大的默認圖片資源放到xxhdip文件夾下,這樣在1080p手機下加載就不會縮放,在720p下加載會減少內存占用,雖然可能會導致渲染效率降低,但是基本影響不大。

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved