软件编程
位置:首页>> 软件编程>> Android编程>> Kotlin中的handler如何避免内存泄漏详解

Kotlin中的handler如何避免内存泄漏详解

作者:Donkor-  发布时间:2023-10-18 22:02:40 

标签:kotlin,handler,内存泄漏

前言:

哲学老师说,看待事物无非是了解它是什么,为什么,怎么做

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

摘自百度的一段话:用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。

是不是有点拗口,换一种说法,有天你去一家饭店吃饭,有个胖子吃完饭了,却霸占着一张桌子不走,然而现在一堆人等着吃饭,结果那死胖子等到饭店打烊了才离开。

在这个例子中,饭店的桌子就好比内存空间,那个胖子就是一个函数,吃饭就是所执行的事件。

这么说是不是好理解多了,现在,我们要做的就是赶走这个死胖子。

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

来源:http://blog.csdn.net/donkor_/article/details/78796518

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com