image.png
為什么創(chuàng)建這個提示會內(nèi)存泄漏?
1.
image.png
image.png
image.png
final修飾的,意味著我的MessageQueue一旦初始化不可改變
image.png
一個線程有一個Looper,一個looper只有一個MesageQueue
內(nèi)存泄露就是JVM的gc沒有回收,有個可達性分析算法,如果gc分析到不可達;
匿名內(nèi)部類會持有外部類的對象
handle會持有Activity的對象,handle在sendmessage最后會enqueueMessage這里進行入隊列,這個有個this=mag.tag
image.png
這個this就是Handle,現(xiàn)在Mag持有Handle對象
假如說這個Msg會在10分鐘之后執(zhí)行,那么他會一直在MessageQueue里面,MessageQueue一直會存在在looper里面,他是不會退出的;
反過來說Looper不會退出,那么MessageQueue不會退出,MessageQueue不會退出,那么Msg不會退出,Msg是存在Handle里的,Handle持有外部類Activity 就不會退出
消息的延遲發(fā)送,導致鏈上的一直不釋放,實質(zhì)就是Handle的機制引起的,每一個消息其實都是有假如時間的,不傳就是默認的立即執(zhí)行;
解決辦法
static修飾,他就不會持有外部類的對象