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

首頁 > 開發(fā) > 綜合 > 正文

Kotlin中的handler如何避免內(nèi)存泄漏詳解

2024-07-21 23:03:42
字體:
供稿:網(wǎng)友

前言:

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

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

摘自百度的一段話:用動態(tài)存儲分配函數(shù)動態(tài)開辟的空間,在使用完畢后未釋放,結(jié)果導(dǎo)致一直占據(jù)該內(nèi)存單元。直到程序結(jié)束。

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

在這個例子中,飯店的桌子就好比內(nèi)存空間,那個胖子就是一個函數(shù),吃飯就是所執(zhí)行的事件。

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

Handler在Android開發(fā)中經(jīng)常使用,一不小心就會陷入內(nèi)存泄漏的問題,最近在開發(fā)一款Kotlin軟件,針對Handler內(nèi)存泄漏的問題做出了解決方案

問題分析:

在finish()的時候,Message還沒有被處理,Message持有Handler, Handler持有Activity,這樣阻止了GC對Acivity的回收,就發(fā)生了內(nèi)存泄露。正確的寫法應(yīng)該是使用顯形的引用,靜態(tài)內(nèi)部類與 外部類。使用弱引用WeakReference。 最后在Activity調(diào)用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() }

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識閱讀請移步到kotlin教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 凭祥市| 黑河市| 淮滨县| 县级市| 咸宁市| 都兰县| 射阳县| 溆浦县| 丰顺县| 如皋市| 鱼台县| 瑞丽市| 朝阳市| 穆棱市| 武宣县| 永泰县| 平泉县| 泸州市| 黑山县| 保靖县| 平谷区| 泸水县| 高雄市| 舞钢市| 逊克县| 龙陵县| 金平| 迁安市| 鸡东县| 云霄县| 甘孜县| 勐海县| 兴山县| 灌云县| 德保县| 垣曲县| 铁力市| 福海县| 肥乡县| 兴安县| 来凤县|