五:自定義堆內存大小 優化
1. InputStream is = this.getResources().openRawResource(R.drawable.pic1);
BitmapFactory.Options options=new BitmapFactory.Options();
options.inJustDecodeBounds = false;
options.inSampleSize = 10; //width,hight設爲原來的十分一
Bitmap btp =BitmapFactory.decodeStream(is,null,options);
2. if(!bmp.isRecycle() ){
bmp.recycle() //回收圖片所佔的內存
system.gc() //提醒系統及時回收
}
上面代碼與下面代碼你們可分開使用,也可有效緩解內存問題哦…吼吼…
/** 這個地方你們別搞混了,爲了方便小馬把兩個貼一塊兒了,使用的時候記得分開使用
* 以最省內存的方式讀取本地資源的圖片
*/
public static Bitmap readBitMap(Context context, int resId){
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inPreferredConfig = Bitmap.Config.RGB_565;
opt.inPurgeable = true;
opt.inInputShareable = true;
//獲取資源圖片
InputStream is = context.getResources().openRawResource(resId);
return BitmapFactory.decodeStream(is,null,opt);
}
3:你們能夠選擇在合適的地方使用如下代碼動態並自行顯式調用GC來回收內存:
if(bitmapObject.isRecycled()==false) //若是沒有回收
bitmapObject.recycle();
4:這個就好玩了,優化Dalvik虛擬機的堆內存分配,聽着很強大,來看下具體是怎麼一回事
對於Android平臺來講,其託管層使用的Dalvik JavaVM從目前的表現來看還有不少地方能夠優化處理,好比咱們在開發一些大型遊戲或耗資源的應用中可能考慮手動干涉GC處理,使用 dalvik.system.VMRuntime類提供的setTargetHeapUtilization方法能夠加強程序堆內存的處理效率。固然具體原理咱們能夠參考開源工程,這裏咱們僅說下使用方法: 代碼以下:
private final static floatTARGET_HEAP_UTILIZATION = 0.75f;
在程序onCreate時就能夠調用
VMRuntime.getRuntime().setTargetHeapUtilization(TARGET_HEAP_UTILIZATION);
便可
5:自定義咱們的應用須要多大的內存,這個好暴力哇,強行設置最小內存大小,代碼以下:
private final static int CWJ_HEAP_SIZE = 6* 1024* 1024 ;
//設置最小heap內存爲6MB大小
VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE);
this