亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

android內存優化之圖片優化

2020-04-11 12:37:58
字體:
來源:轉載
供稿:網友

對圖片本身進行操作。盡量不要使用setImageBitmap、setImageResource、BitmapFactory.decodeResource來設置一張大圖,因為這些方法在完成decode后,最終都是通過java層的createBitmap來完成的,需要消耗更多內存。因此,改用先通過BitmapFactory.decodeStream方法,創建出一個bitmap,再將其設為ImageView的source,decodeStream最大的秘密在于其直接調用JNI>>nativeDecodeAsset()來完成decode,無需再使用java層的createBitmap,從而節省了java層的空間。如果在讀取時加上圖片的Config參數,可以更有效的減少加載的內存,從而更有效阻止拋出內存異常。另外,decodeStream直接拿圖片來讀取字節碼了,不會根據機器的各種分辨率來自動適應,使用了decodeStream之后,需要在hdpi和mdpi,ldpi中配置相應的圖片資源,否則在不同分辨率機器上都是同樣大小(像素點數量),顯示出來的大小就不對了。

復制代碼 代碼如下:

InputStreamis=this.getResources().openRawResource(R.drawable.pic1);
BitmapFactory.Optionsoptions=newBitmapFactory.Options();
options.inJustDecodeBounds=false;
options.inSampleSize=10;//width,hight設為原來的十分一
Bitmapbtp=BitmapFactory.decodeStream(is,null,options);

復制代碼 代碼如下:

if(!bmp.isRecycle()){
bmp.recycle()//回收圖片所占的內存
system.gc()//提醒系統及時回收
}

復制代碼 代碼如下:

/**
*以最省內存的方式讀取本地資源的圖片
*@paramcontext
*@paramresId
*@return
*/
publicstaticBitmapreadBitMap(Contextcontext,intresId){
BitmapFactory.Optionsopt=newBitmapFactory.Options();
opt.inPreferredConfig=Bitmap.Config.RGB_565;
opt.inPurgeable=true;
opt.inInputShareable=true;
//獲取資源圖片
InputStreamis=context.getResources().openRawResource(resId);
returnBitmapFactory.decodeStream(is,null,opt);
}

option中的值指的是,圖片進行縮放的比例,SDK中建議其值是2的指數值,值越大會導致圖片不清晰。長度、寬度都只有原圖片的1/2。圖片大小減少,占用的內存自然也變小了。這么做的弊端是圖片質量變差,inSampleSize的值越大,圖片的質量就越差。由于各手機廠商縮放圖片的算法不同,在不同手機上的縮放圖片質量可能會不同。筆者就遭遇過moto手機上圖片縮放后質量可以接受,三星手機上同樣的縮放比例,質量卻差很多的情況。

Android中有四種,分別是
ALPHA_8:每個像素占用1byte內存
ARGB_4444:每個像素占用2byte內存
ARGB_8888:每個像素占用4byte內存
RGB_565:每個像素占用2byte內存
Android默認的顏色模式為ARGB_8888,這個顏色模式色彩最細膩,顯示質量最高。但同樣的,占用的內存也最大。
以上代碼即是將1.png以ARGB_4444模式讀出。內存減少雖然不如第一種方法明顯,但是對于大多數圖片,看不出與ARGB_8888模式有什么差別。不過在讀取有漸變效果的圖片時,可能有顏色條出現。另外,會影響圖片的特效處理。
優化Dalvik虛擬機的堆內存分配。對于Android平臺來說,其托管層使用的DalvikJavaVM從目前的表現來看還有很多地方可以優化處理,比如我們在開發一些大型游戲或耗資源的應用中可能考慮手動干涉GC處理,使用dalvik.system.VMRuntime類提供的setTargetHeapUtilization方法可以增強程序堆內存的處理效率。使用方法:
復制代碼 代碼如下:

privatefinalstaticfloatTARGET_HEAP_UTILIZATION=0.75f;
VMRuntime.getRuntime().setTargetHeapUtilization(TARGET_HEAP_UTILIZATION);

即可。
還有就是可以定義堆內存的大小。
復制代碼 代碼如下:

privatefinalstaticintCWJ_HEAP_SIZE=6*1024*1024;VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE);//設置最小heap內存為6MB大小

調用圖片的recycle()方法:
這個其實不是真正降低圖片內存的方法。主要目的是標記圖片對象,方便回收圖片對象的本地數據。圖片對象的本地數據占用的內存最大,而且與程序Java部分的內存是分開計算的。所以經常出現Javaheap足夠使用,而圖片發生OutOfMemoryError的情況。在圖片不使用時調用該方法,可以有效降低圖片本地數據的峰值,從而減少OutOfMemoryError的概率。不過調用了recycle()的圖片對象處于“廢棄”狀態,調用時會造成程序錯誤。所以在無法保證該圖片對象絕對不會被再次調用的情況下,不建議使用該方法。特別要注意已經用setImageBitmap(Bitmapimg)方法分配給控件的圖片對象,可能會被系統類庫調用,造成程序錯誤。

使用Matrix對象放大的圖片如何更改顏色模式
雖然使用Matrix對象放大圖片,必定會耗費更多的內存,但有時候也不得不這樣做。放大后的圖片使用的ARGB_8888顏色模式,就算原圖片是ARGB_4444顏色模式也一樣,而且沒有辦法在放大時直接指定顏色模式。可以采用以下辦法更改圖片顏色模式。
代碼如下
復制代碼 代碼如下:

Matrixmatrix=newMatrix();
floatnewWidth=200;//圖片放大后的寬度
floatnewHeight=300;//圖片放大后的長度
matrix.postScale(newWidth/img.getWidth(),newHeight/img.getHeight());
Bitmapimg1=Bitmap.createBitmap(img,0,0,img.getWidth(),img.getHeight(),matrix,true);//得到放大的圖片
img2=img1.copy(Bitmap.Config.ARGB_4444,false);//得到ARGB_4444顏色模式的圖片
img=null;
img1=null;

這里比起原來的圖片額外生成了一個圖片對象img1。但是系統會自動回收img1,所以實際內存還是減少了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91亚洲国产精品| 91精品视频在线看| 国产精品v日韩精品| 综合久久五月天| 国产精品91在线| 夜夜嗨av色一区二区不卡| 亚洲性视频网站| 欧美电影在线观看网站| 亚洲欧美精品suv| 亚洲综合中文字幕在线| 久久全球大尺度高清视频| 中日韩美女免费视频网址在线观看| 欧美日韩国产综合新一区| 久久久www成人免费精品| 夜夜嗨av色综合久久久综合网| 91精品国产高清久久久久久91| 最近中文字幕mv在线一区二区三区四区| 久久久人成影片一区二区三区| 亚洲精品国产精品自产a区红杏吧| 欧美黄色三级网站| 日本精品免费观看| 成人国产精品久久久久久亚洲| 久久精品国产亚洲精品2020| 欧美日韩国产精品| 亚洲第一av网站| 亚洲午夜未满十八勿入免费观看全集| 亚洲3p在线观看| 亚洲国产精品成人va在线观看| 亚洲精品中文字幕有码专区| 久久久久久久网站| 欧美日韩国产激情| 精品丝袜一区二区三区| 亚洲最新av在线网站| 国产精品你懂得| 亚洲国产天堂久久国产91| 欧美精品激情视频| 懂色aⅴ精品一区二区三区蜜月| 欧美日韩国产综合新一区| 欧美亚洲激情在线| 美日韩精品免费观看视频| 久久高清视频免费| 黄色91在线观看| 亚洲欧美一区二区三区久久| 欧美精品成人在线| 成人激情av在线| 日韩久久精品成人| 欧美大胆在线视频| 日韩免费视频在线观看| 91亚洲精品视频| 好吊成人免视频| 欧美日韩在线观看视频小说| 欧美成人精品一区二区三区| 5278欧美一区二区三区| 亚洲精品久久久久中文字幕欢迎你| 日韩在线视频二区| 91精品免费久久久久久久久| 日韩有码在线观看| 日韩电影在线观看中文字幕| 日韩欧美国产高清91| 夜夜嗨av色综合久久久综合网| 欧美激情综合色| 国产不卡在线观看| 日韩精品中文字幕在线| 亚洲精品视频在线播放| 国产精品久久久久久久久久三级| 国产精品美女久久久免费| 中文字幕亚洲无线码a| 亚洲综合社区网| 亚洲aⅴ日韩av电影在线观看| 欧美体内谢she精2性欧美| 亚洲精品福利在线| 国产成人综合精品在线| 欧美裸体xxxx极品少妇| 成人a级免费视频| 国产视频一区在线| 亚洲精品白浆高清久久久久久| 日本免费在线精品| 国产成人a亚洲精品| 欧美电影在线免费观看网站| 欧美大学生性色视频| 国产精品成人观看视频国产奇米| 91在线观看免费观看| 日本午夜精品理论片a级appf发布| 欧美另类69精品久久久久9999| 美日韩精品免费观看视频| 91av在线视频观看| 欧美精品www| 国产精品久久久久久av福利软件| 精品国产精品自拍| 91深夜福利视频| 国产一区二区三区精品久久久| 国产精品专区一| 国产精品久久久久久av下载红粉| 国产精品亚洲аv天堂网| 亚洲欧洲日韩国产| 精品视频久久久久久久| 亚洲欧美日韩一区二区在线| 亚洲国产欧美一区| 日韩精品视频免费在线观看| 琪琪亚洲精品午夜在线| 成人免费激情视频| 91欧美日韩一区| 国产91露脸中文字幕在线| 欧美一二三视频| 97久久精品国产| 久久69精品久久久久久久电影好| 国产欧美va欧美va香蕉在线| 国产一区二区三区免费视频| 清纯唯美亚洲激情| 亚洲乱亚洲乱妇无码| 亚洲精品久久久久中文字幕二区| 国产精品亚洲аv天堂网| 久久影院中文字幕| 欧美性猛交xxxx黑人猛交| 亚洲人成在线观| 久久91超碰青草是什么| 国产精品久久久久久久久久久不卡| 亚洲国产精品热久久| yw.139尤物在线精品视频| 不卡在线观看电视剧完整版| 国产欧美日韩丝袜精品一区| 亚洲毛片在线免费观看| 亚洲视频在线免费看| 国产mv免费观看入口亚洲| 欧美大片大片在线播放| 欧美二区乱c黑人| 在线免费看av不卡| 欧美激情影音先锋| 亚洲欧美日韩第一区| 欧美亚洲在线播放| 日韩成人久久久| 亚州精品天堂中文字幕| 国产成人高清激情视频在线观看| 国产精品嫩草影院久久久| 久久久久国产精品www| 国产免费一区二区三区在线能观看| 日韩中文在线不卡| 日韩中文综合网| 国产综合久久久久久| 国产a∨精品一区二区三区不卡| 成人高清视频观看www| 91精品国产高清久久久久久| 国产精品久久久久久亚洲调教| **欧美日韩vr在线| 欧美性高潮床叫视频| 日韩美女av在线免费观看| 欧美大尺度在线观看| 亚洲欧美一区二区三区在线| 95av在线视频| 91精品视频在线播放| 成人欧美一区二区三区黑人孕妇| xvideos国产精品| 色偷偷噜噜噜亚洲男人| 亚洲嫩模很污视频| 久久久久久国产免费| 久久色精品视频| 亚洲国模精品一区| 欧美午夜精品久久久久久人妖| 中文字幕av一区中文字幕天堂| 久久成人精品一区二区三区| 久久久久久久久久久国产| 成人妇女免费播放久久久| 青青久久av北条麻妃黑人| 亚洲精品美女久久久|