使用WeakReference來解決Handler帶來的內(nèi)存泄漏

? ? 我們?cè)陧?xiàng)目項(xiàng)目中使用Handler是為了更新ui,我們?cè)谥骶€程中創(chuàng)建Handler對(duì)象,在子線程中處理一些耗時(shí)操作,handler通過發(fā)送message或者post(runnable)的方式,讓主線程更新ui。

? ? 因?yàn)樽泳€程中是一個(gè)耗時(shí)操作,比如在訪問網(wǎng)絡(luò)請(qǐng)求的過程中,我把該Activity關(guān)閉了,但是這時(shí)候Handler仍然存有該該頁(yè)面的引用。這樣就導(dǎo)致該activity無法被回收,就會(huì)造成內(nèi)存泄漏。

解決方法之一就是把Handler改成持有該Activity的弱引用,并把類聲明為static,靜態(tài)類不持有外部類的對(duì)象,所以你的Activity可以隨意被回收

代碼如下:


我們進(jìn)入WeakReference的源碼,看看WeakReference的描述信息


翻譯過來也就是弱引用不會(huì)阻止引用對(duì)象被終止或是回收

還有我們?cè)贛VP的架構(gòu)項(xiàng)目中,在P成也會(huì)用到WeakReference,實(shí)例如下


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

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容