常见的八种导致 APP 内存泄漏的问题(下)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常见的八种导致 APP 内存泄漏的问题(下)相关的知识,希望对你有一定的参考价值。

百度搜索:小强测试品牌

QQ群:138269539

 

Handlers


同 样的,定义一个匿名的 Runnable 对象并将其提交到 Handler 上也可能导致 activity 泄漏。Runnable 对象间接地引用了定义它的activity 对象,而它会被提交到 Handler 的 MessageQueue 中,如果它在 activity 销毁时还没有被处理,那就会导致 activity 泄漏了。

技术分享

技术分享

Threads


同样的,使用 Thread 和 TimerTask 也可能导致 activity 泄漏

技术分享

技术分享

Timer Tasks


只要它们是通过匿名类创建的,尽管它们在单独的线程被执行,它们也会持有对 activity 的强引用,进而导致内存泄漏

技术分享

技术分享

Sensor Manager


最 后,系统服务可以通过 context.getSystemService 获取,它们负责执行某些后台任务,或者为硬件访问提供接口。如果 context 对象想要在服务内部的事件发生时被通知,那就需要把自己注册到服务的监听器中。然而,这会让服务持有 activity 的引用,如果程序员忘记在 activity 销毁时取消注册,那就会导致 activity 泄漏了。

技术分享

技术分享

现 在,我们展示了八种很容易不经意间就泄漏大量内存的情景。请记住,最坏的情况下,你的 APP 可能会由于大量的内存泄漏而内存耗尽,进而闪退,但它并不总是这样。相反,内存泄漏会消耗大量的内存,但却不至于内存耗尽,这时,APP 会由于内存不够分配而频繁进行垃圾回收。垃圾回收是非常耗时的操作,会导致严重的卡顿。在 activity 内部创建对象时,一定要格外小心,并且要经常测试是否存在内存泄漏。

以上是关于常见的八种导致 APP 内存泄漏的问题(下)的主要内容,如果未能解决你的问题,请参考以下文章

Android开发常见的Activity中内存泄漏及解决办法

分析 ThreadLocal 内存泄漏问题

内存泄漏和内存溢出的区别

安卓内存分析——常见内存泄漏场景二

内存泄漏与垃圾回收机制

常见的内存泄漏原因及解决方法