美文网首页
2022-03-29

2022-03-29

作者: jiluyixia | 来源:发表于2022-03-29 16:04 被阅读0次

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

    相关文章

      网友评论

          本文标题:2022-03-29

          本文链接:https://www.haomeiwen.com/subject/pfpvjrtx.html