91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-08-24 19:06:09 來源:腳本之家 閱讀:272 作者:Donkor- 欄目:移動開發

前言:

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

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

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

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

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

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

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

總結

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

社会| 海城市| 威海市| 隆德县| 嘉义市| 平遥县| 南宫市| 读书| 临澧县| 湖口县| 平陆县| 尼玛县| 长武县| 花垣县| 巴楚县| 崇明县| 八宿县| 陵川县| 黄冈市| 柞水县| 邢台市| 敖汉旗| 金寨县| 宁津县| 阳山县| 英德市| 光山县| 江门市| 嘉鱼县| 明光市| 灵丘县| 渭南市| 秭归县| 乌拉特中旗| 鹰潭市| 鸡泽县| 旺苍县| 云霄县| 甘孜| 驻马店市| 静海县|