2022-03-29

一::内存溢出(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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容