-
Notifications
You must be signed in to change notification settings - Fork 0
Handler
DawnSpring edited this page Jan 8, 2021
·
18 revisions
参考: https://blog.csdn.net/qq_37321098/article/details/81535449 https://blog.csdn.net/androidsj/article/details/79865091
- handler用法 发送消息and接收消息,具体用法
//传递的data
var bundle = Bundle()
bundle.putString("msg","我可以")
//send data
private lateinit var handler:Handler
var message = handler.obtainMessage()
message.data = bundle
message.what = 0x11
handler.sendMessage(message)
//receive data
**handler = @SuppressLint("HandlerLeak")**
object :Handler(){
override fun handleMessage(msg: Message){
super.handleMessage(msg)
if (msg.what == 0x11){
}
}
}
代码里有句提示:
handler = @SuppressLint("HandlerLeak")
表示代码不规范,有内存泄漏的风险,原因:
Handler在Android中用于消息的发送和异步处理,Handler常作为匿名内部类来定义,此时Handler会隐式的持有外部类对象的引用,当外部类关闭时,由于handler持有外部类的引用造成外部类无法被GC回收,这样容易造成内存泄漏;
解决方法:
将其定义成一个静态内部类(此时不会持有外部类对象的引用),在构造方法中传入外部类,并对外部类对象增加一个弱引用,外部类关闭后,即使异步消息未处理完毕,外部类也能被GC回收,从而避免内存泄漏。