android 常用的解決內存溢出(OOM)的方法

已經遇到瞭N次內存溢出的情況瞭,必須吸取教訓啊!

首先,bitmap常常是造成OOM的罪魁禍首!必須第一個解決:

bitmap 的作用域能小就盡量小,用完就趕緊recycle掉!不過我經常都是在ondestroy裡面才recycle~

//回收圖片資源

if(bitmaps != null && bitmaps.length > 0){

int length = bitmaps.length;

for(int i=0; i<length; i++){

if(bitmaps[i] != null && !bitmaps[i].isRecycled()){

bitmaps[i].recycle();

}

}

}

 然後呢,就是如果用到ViewGroup的子類(比如ListView、GridView等)的話,就要移除它的ChildView,因為這玩意兒看著也很耗內存的樣子。。。

int listViewCount = dataList.size();

if(listView != null && (dataList != null && listViewCount>0)){

for(int i=0; i<listViewCount; i++){

dataList.removeAll(dataList);

adapter.notifyDataSetChanged();

}

}

listView = null;

dataList = null; 

上面的兩段代碼我都是直接放onDestroy裡面執行的,效果還蠻好~ 至少不會崩~

———————————-分割線————————————

當然,解決OOM的方法還有很多,比如WeakReference、壓縮bitmap圖像甚至直接修改Dalvik虛擬機分配內存的數量,- – ! 我就不一一說瞭,因為,,,我不會~ ╮(╯▽╰)╭ ~ 

 

WeakReference:

 

 

String abc=new String("abc");       

 

WeakReference<String> abcWeakRef = new WeakReference<String>(abc);       

 

abc=null;       

 

System.out.println("before gc: "+abcWeakRef.get());       

 

System.gc();       

 

System.out.println("after gc: "+abcWeakRef.get());  

 

 

壓縮bitmap:

BitmapFactory.Options opts = new BitmapFactory.Options();

opts.inSampleSize = 4;  

opts.inJustDecodeBounds = false;

Bitmap bitmap = BitmapFactory.decodeFile(filepath,opts);

 

~~~Good Luck!

發佈留言