一::内存溢出(out of memory)和内存泄漏(memory leak)的区别
内存溢出:应用所需要的内存超过系统分配的内存限额,就会出现oom。
内存泄漏:对象无法正常回收,就会造成内存泄漏,当内存泄漏过多时,会造成内存溢出。
要避免内存溢出,主要是防止内存泄漏,可以从以下几个方面来处理:
1:控制图片的大小,压缩图片,显示缩略图的时候,不要请求网络显示大图,比喻,在recycleview滑动的时候,显示缩略图,
等滑动结束,再请求网络显示大图。
2:及时释放对象,比喻bitmap,list这些。
// Bitmap对象没有被回收
if (!bitmapObject.isRecyled()) {
// 释放
bitmapObject.recycle();
// 提醒系统及时回收
System.gc();
}
//释放objectList
objectList.clear();
objectList=null;
3:页面关闭的时候资源要关闭
广播broadcastreceiver需要注销注册unregisterReceiver();
文件流File:记得关闭流InputStream / OutputStream.close();
对于图片资源Bitmap:当它不再被使用时,应调用recycle()回收此对象的像素所占用的内存,再赋为null
在Activity中onDestroy去调用objectAnimator.cancel()来停止动画。
还有一些第三方的比喻eventbus,也需要在ondestroy里注销。
这些资源不关闭,在activity关闭的时候,页面没有被回收,会造成内存泄漏。
4:context尽量使用application的context
比喻单例,如果单例中传入的是activity的context,在activity关闭后,不会被回收,因为单例里面持有activity的context