美文网首页Android基础面试知识
Android基础面试知识02-内存泄漏

Android基础面试知识02-内存泄漏

作者: ibore | 来源:发表于2021-03-24 22:28 被阅读0次

    1. 什么是内存泄漏, 内存泄漏会导致什么问题?

    指一个对象不再使用,本应该被回收,但由于某些原因导致对象无法回收,仍然占用着内存,这就是内存泄漏。

    Java有一套自己的内存回收机制,但往往被一些不好的开发习惯导致对象无法回收,进而会使应用程序使用时间越长,内存占用率越高,超出系统给设置的阈值的时候就会造成OOM(Out Of Memory)内存溢出的问题。当应用切换到后台的时候,系统会优先回收内存占用率高的应用,造成应用的不稳定性(比如后台执行操作的时候直接被销毁了)


    2. 内存泄漏产生的原因和解决方案

    创建单例的时候引用Activity的Context,单例的周期和应用的周期一致,当Activity被销毁的时候,内存不会被回收。引用Application的Context即可解决

    使用Thread+Hander或者AsyncTask进行耗时操作的时候,Activity被销毁的时候,耗时操作未完成,内存不会被回收,耗时操作完成时也会引起崩溃。在Activity销毁的时候,移除耗时操作

    使用WebView的时候造成的内存泄漏,不同版本存在不同的问题。在Activity被销毁的时候,通过WebView的父布局移除WebView,或者开启新进程,在结束操作的时候直接System.exit(0)结束掉进程,但需要注意进程间的通讯

    IO操作时,未关闭流,数据库操作时,未关闭游标


    3. 如何检测内存泄漏

    Square的开源库LeakCanary,内存泄漏时,会进行通知栏提醒

    相关文章

      网友评论

        本文标题:Android基础面试知识02-内存泄漏

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