Android内存溢出和内存泄漏

2017-03-24  本文已影响84人  正义吖

大部分的OOM都是发生在图片加载上的,当我们加载大图时,需要特别注意避免OOM的发生。

Options options = new BitmapFactory.Options(); 
options.inSampleSize = 5; // 原图的五分之一,设置为2则为二分之一 
BitmapFactory.decodeFile(myImage.getAbsolutePath(), options);

这样做要注意的是,图片质量会变差,inSampleSize设置的值越大,图片质量就越差,不同的手机厂商缩放的比例可能不同。

if (!bitmapObject.isRecyled()) {     // Bitmap对象没有被回收 
     bitmapObject.recycle();     // 释放 
     System.gc();     // 提醒系统及时回收 
}  
BitmapFactory.Options options = new BitmapFactory.Options(); 

options.inJustDecodeBounds = true; // 不把图片加载到内存中 

Bitmap btimapObject = BitmapFactory.decodeFile(myImage.getAbsolutePath(), options); 

如何避免内存泄漏?

1,在 onDestroy()方法中显示调用mThread.close();以此来结束该线程,这就避免了线程的内存泄漏问题。
2,使用application context 代替activity context;
3,资源对象没关闭造成的内存泄漏,如Cursor没有close掉;
4,Bitmap记得recycle掉;
5,构造Adapter时,没有使用缓存的convertView。

上一篇 下一篇

猜你喜欢

热点阅读