百度搜索:小強測試品牌
QQ群:138269539
Handlers
同 樣的,定義一個匿名的 Runnable 對象并將其提交到 Handler 上也可能導致 activity 泄漏。Runnable 對象間接地引用了定義它的activity 對象,而它會被提交到 Handler 的 MessageQueue 中,如果它在 activity 銷毀時還沒有被處理,那就會導致 activity 泄漏了。
Threads
同樣的,使用 Thread 和 TimerTask 也可能導致 activity 泄漏
Timer Tasks
只要它們是通過匿名類創(chuàng)建的,盡管它們在單獨的線程被執(zhí)行,它們也會持有對 activity 的強引用,進而導致內存泄漏
Sensor Manager
最 后,系統(tǒng)服務可以通過 context.getSystemService 獲取,它們負責執(zhí)行某些后臺任務,或者為硬件訪問提供接口。如果 context 對象想要在服務內部的事件發(fā)生時被通知,那就需要把自己注冊到服務的監(jiān)聽器中。然而,這會讓服務持有 activity 的引用,如果程序員忘記在 activity 銷毀時取消注冊,那就會導致 activity 泄漏了。
現(xiàn) 在,我們展示了八種很容易不經(jīng)意間就泄漏大量內存的情景。請記住,最壞的情況下,你的 APP 可能會由于大量的內存泄漏而內存耗盡,進而閃退,但它并不總是這樣。相反,內存泄漏會消耗大量的內存,但卻不至于內存耗盡,這時,APP 會由于內存不夠分配而頻繁進行垃圾回收。垃圾回收是非常耗時的操作,會導致嚴重的卡頓。在 activity 內部創(chuàng)建對象時,一定要格外小心,并且要經(jīng)常測試是否存在內存泄漏。