Handler的封装
封装handler:
/**
* 软引用的Handler
*/
class MyHandler(mActivity: Activity, mListen: (Message?) -> Unit) : Handler() {
private var mWeakReference: WeakReference<Activity> = WeakReference(mActivity)//添加弱引用
private var mListen=mListen
override fun handleMessage(msg: Message) {
super.handleMessage(msg)
if (mWeakReference.get() != null) {
mListen(msg)
}
}
}
MainActivity:
class MainActivity : AppCompatActivity() {
var myHandler = MyHandler(this) {
Log.d("WY+", "it的数据为:$it")
when (it!!.what) {
1 -> {
Log.d("WY+", "延时执行了")
}
2 -> {
Log.d("WY+", "字符串数据为:" + it.obj)
}
3 -> {
Log.d("WY+", "更新UI:" + it.obj)
tv_1.text = it.obj.toString()//此处不用使用runOnUiThread
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//第一种(延时)
myHandler.sendEmptyMessageDelayed(1, 5000)
//第二种(发送数据)
var message: Message = myHandler.obtainMessage()
message.what = 2
message.obj = "字符串数据666"
myHandler.sendMessage(message)
//第3种(发送数据并且更新UI)
var message1: Message = myHandler.obtainMessage()
message1.what = 3
message1.obj = "更新UI数据:000"
myHandler.sendMessage(message1)
}
}
避免oom的方法有两种:
1、弱引用(如上)
2、在ondestroy里面调用handler.removeCallbacksAndMessages(null);
demo的下载地址为:
https://download.csdn.net/download/wy313622821/12265063
结束!!!!