五:自定义堆内存大小 优化
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