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

少年击剑更吹箫,剑气箫心一例消。这篇文章主要讲述常见的八种导致 APP 内存泄漏的问题(下)相关的知识,希望能为你提供帮助。
百度搜索:小强测试品牌
QQ群:138269539
 
Handlers
同 样的,定义一个匿名的 Runnable 对象并将其提交到 Handler 上也可能导致 activity 泄漏。Runnable 对象间接地引用了定义它的activity 对象,而它会被提交到 Handler 的 MessageQueue 中,如果它在 activity 销毁时还没有被处理,那就会导致 activity 泄漏了。

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

文章图片

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

文章图片

Threads
同样的,使用 Thread 和 TimerTask 也可能导致 activity 泄漏
常见的八种导致 APP 内存泄漏的问题(下)

文章图片

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

文章图片

Timer Tasks
只要它们是通过匿名类创建的,尽管它们在单独的线程被执行,它们也会持有对 activity 的强引用,进而导致内存泄漏
常见的八种导致 APP 内存泄漏的问题(下)

文章图片

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

文章图片

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

文章图片

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

文章图片

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

    推荐阅读