Kotlin中的handler如何避免内存泄漏详解
作者:Donkor- 时间:2023-10-18 22:02:40
前言:
哲学老师说,看待事物无非是了解它是什么,为什么,怎么做
所以,首先,我们先了解一下什么是“内存泄漏”
摘自百度的一段话:用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。
是不是有点拗口,换一种说法,有天你去一家饭店吃饭,有个胖子吃完饭了,却霸占着一张桌子不走,然而现在一堆人等着吃饭,结果那死胖子等到饭店打烊了才离开。
在这个例子中,饭店的桌子就好比内存空间,那个胖子就是一个函数,吃饭就是所执行的事件。
这么说是不是好理解多了,现在,我们要做的就是赶走这个死胖子。
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
标签:kotlin,handler,内存泄漏
0
投稿
猜你喜欢
C++中类的默认成员函数详解
2022-08-01 16:41:04
SharedPreference 初始化源码解析
2023-11-13 07:00:43
Android数据持久化之Preferences机制详解
2021-09-04 23:42:32
C#多线程之任务的用法详解
2023-08-27 10:51:18
C#中foreach语句使用break暂停遍历的方法
2022-10-12 20:14:11
Mybatis 复杂对象resultMap的使用
2023-10-12 22:56:44
Java数组传递及可变参数操作实例详解
2023-08-26 21:21:59
Android实时文件夹创建方法
2023-11-30 03:13:42
java.util.concurrent.ExecutionException 问题解决方法
2022-12-09 21:15:04
Java实现获取内网的所有IP地址
2023-01-01 07:48:56
Android基于开源项目xutils3实现下载
2023-05-06 06:24:15
Java NIO实战之多人聊天室
2022-02-28 15:05:00
C#实现语音视频录制-附demo源码
2023-10-04 13:22:03
C#生成带logo的二维码
2021-11-03 17:38:41
C# FileStream读写的文本操作代码分析
2021-12-25 01:47:28
Android Studio 一键生成Json实体类教程
2023-05-19 20:13:39
学习Java的9张思维导图
2021-06-10 03:38:18
java操作excel表格详解
2021-08-20 14:35:46
JavaWeb 使用DBUtils实现增删改查方式
2023-01-31 04:31:48
Java设计模式中的七大原则详细讲解
2021-07-23 15:38:14