Android内存溢出整理总结

通常咱们你们在遇到内存问题的时候经常使用的方式网上也有相关资料,大致以下几种:
一:在内存引用上作些处理,经常使用的有软引用、强化引用、弱引用
二:在内存中加载图片时直接在内存中作处理,如:边界压缩
三:动态回收内存
四:优化Dalvik虚拟机的堆内存分配

五:自定义堆内存大小 优化

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

相关文章
相关标签/搜索