美文网首页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