leak警告
直接做如下定义时,Handler会隐式地持有一个外部类对象的引用,如果用户想要关闭当前Activity,则因为handler持有一个外部引用而导致Activity无法被GC回收
private MyHandler myHandler = new MyHandler(this);
@SuppressLint("HandlerLeak")
Handler handler = new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
}
};
正确做法:
private MyHandler handler = new MyHandler(this);
static class MyHandler extends Handler {
WeakReference weakReference;
public MyHandler(Activity activity) {
weakReference = new WeakReference(activity);
}
@Override
public void handleMessage(Message msg) {
}
}