封装Handler
/**
* 创建一个静态Handler内部类,然后对Handler持有的对象使用弱引用,这样在回收时也可以回收Handler持有的对象,
* 这样虽然避免了Activity泄漏,不过Looper线程的消息队列中还是可能会有待处理的消息,所以我们在Activity的Destroy时或者Stop时应该移除消息队列中的消息
*/
public class CustomHandler<T> extends Handler {
//弱引用
protected WeakReference<T> ref;
public CustomHandler(T cls){
ref = new WeakReference<T>(cls);
}
public T getRef(){
return ref != null ? ref.get() : null;
}
}
使用
private val myHandler = MyHandler(this)
private class MyHandler(cls:WelcomeActivity): CustomHandler<WelcomeActivity>(cls){
override fun handleMessage(msg: Message) {
super.handleMessage(msg)
//获取传入context
val mContext = getRef()
//逻辑部分
}
}
//页面销毁清空队列
override fun onDestroy() {
myHandler?.removeCallbacksAndMessages(null)
super.onDestroy()
}