轉載請標明出處:http://blog.csdn.net/donkor_/article/details/78796518
前言:
Handler在Android開發中經常使用,一不小心就會陷入內存泄漏的問題,最近在開發一款Kotlin軟件,針對Handler內存泄漏的問題做出瞭解決方案
問題分析:
在finish()的時候,Message還沒有被處理,Message持有Handler, Handler持有Activity,這樣阻止了GC對Acivity的回收,就發生了內存泄露。正確的寫法應該是使用顯形的引用,靜態內部類與 外部類。使用弱引用WeakReference。 最後在Activity調用onDestroy()的時候要取消掉該Handler對象的Message和Runnable
核心代碼:
private class MyHandler(activity: thisActivity) : Handler() {
private val mActivity: WeakReference<thisActivity> = WeakReference(activity)
override fun handleMessage(msg: Message) {
if (mActivity.get() == null) {
return
}
val activity = mActivity.get()
when (msg.what) {
0-> {
}
else -> {
}
}
}
}
override fun onDestroy() {
// Remove all Runnable and Message.
MyHandler(this).removeCallbacksAndMessages(null)
super.onDestroy()
}
About me
Email :[email protected]
Android開發交流QQ羣 : 537891203