美文网首页Android专题
什么是内存泄露?产生原因?解决方法

什么是内存泄露?产生原因?解决方法

作者: 千夜零一 | 来源:发表于2021-02-22 19:36 被阅读0次

    什么是内存泄露?

      内存泄漏也称作"存储渗漏",用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元,直到程序结束。
      简而言之,就是该内存空间使用完毕之后未回收。


    产生内存泄露的原因有哪些?

    • 1、单例造成的内存泄漏
      如果一个对象已经不再需要使用了,而单例对象还持有该对象的引用,就会使得该对象不能被正常回收,从而导致了内存泄漏。
    • 2、非静态内部类创建静态实例造成的内存泄漏
    • 3、Handler造成的内存泄漏
      解决方法:将Handler类独立出来或者使用静态内部类,这样便可以避免内存泄漏。
    • 4、线程造成的内存泄漏
      解决方法:将AsyncTask和Runnable类独立出来或者使用静态内部类,这样便可以避免内存泄漏。
    • 5、资源未关闭造成的内存泄漏
      对于使用了BraodcastReceiver,ContentObserver,File,Cursor,Stream,Bitmap等资源,应该在Activity销毁时及时关闭或者注销,否则这些资源将不会被回收,从而造成内存泄漏。
      资源型对象未关闭: Cursor,File

    实际开发中遇到的内存泄露场景?

    1、资源型对象未关闭: Cursor,File
    2、注册对象未销毁: 广播,回调监听
    3、类的静态变量持有大数据对象
    4、非静态内部类的静态实例
    5、Handler 临时性内存泄漏: 使用静态 + 弱引用,退出即销毁
    6、容器中的对象没清理造成的内存泄漏
    7、WebView: 使用单独进程


    如何避免内存泄露问题?

    • 平常养成良好的代码书写习惯,该销毁的对象要及时销毁。

    相关文章

      网友评论

        本文标题:什么是内存泄露?产生原因?解决方法

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