国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Kotlin中的handler如何避免內存泄漏詳解

2019-12-12 01:28:07
字體:
來源:轉載
供稿:網友

前言:

哲學老師說,看待事物無非是了解它是什么,為什么,怎么做

所以,首先,我們先了解一下什么是“內存泄漏”

摘自百度的一段話:用動態存儲分配函數動態開辟的空間,在使用完畢后未釋放,結果導致一直占據該內存單元。直到程序結束。

是不是有點拗口,換一種說法,有天你去一家飯店吃飯,有個胖子吃完飯了,卻霸占著一張桌子不走,然而現在一堆人等著吃飯,結果那死胖子等到飯店打烊了才離開。

在這個例子中,飯店的桌子就好比內存空間,那個胖子就是一個函數,吃飯就是所執行的事件。

這么說是不是好理解多了,現在,我們要做的就是趕走這個死胖子。

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() }

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 松溪县| 壤塘县| 龙门县| 青川县| 融水| 绥宁县| 南川市| 托克托县| 运城市| 中超| 通榆县| 永顺县| 洞口县| 弥渡县| 南溪县| 江都市| 白水县| 大厂| 焦作市| 宝丰县| 定远县| 塘沽区| 灵寿县| 轮台县| 油尖旺区| 达孜县| 通山县| 买车| 扬州市| 上高县| 都匀市| 永昌县| 林州市| 上栗县| 城步| 绥江县| 股票| 股票| 龙门县| 额敏县| 来宾市|