
我们大多数人的写法如下所示:
private final Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
};
在Java中,非静态的内部类和匿名内部类都会隐式地持有其外部类的引用,而静态的内部类不会持有外部类的引用。
要解决这个问题,我们在继承Handler的时候,要么是放在单独的类文件中,要么直接使用静态内部类,当需要在静态内部类中调用外部的Activity的时候,我们可以直接采用弱引用进行处理,下面是我们修改后的代码:
private static final class MyHandler extends Handler{
private final WeakReference<MainActivity> mWeakReference;
public MyHandler(WeakReference<MainActivity> mWeakReference) {
this.mWeakReference = mWeakReference;
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
MainActivity activity = mWeakReference.get();
if (activity != null){
//开始写业务代码
}
}
}
网友评论