常見的八種導致 APP 內存泄漏的問題(下)

百度搜索:小強測試品牌

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)常測試是否存在內存泄漏。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容