Handler的实现类采用静态内部类的方式,避免对外部类的强引用,在其内部声明一个WeakReference引用到外部类的实例
MyHandler mHandler;
mHandler = new MyHandler(this);
static class MyHandler extends Handler {
private WeakReference<BaseActivity> activityWeakReference;
public MyHandler(BaseActivity activity) {
super();
this.activityWeakReference = new WeakReference<BaseActivity>(activity);
}
@Override
public void handleMessage(Message msg) {
BaseActivity baseActivity = activityWeakReference.get();
if (baseActivity == null) {
return;
}else{
// Do something with baseActivity as your wish
//baseActivity.handleMessage(msg);
}
}
}
注:另外一种个人相对推荐的写法:直接继承Handler,实现原有的Callback接口
private Handler.Callback callback = new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
switch (msg.what){
case :
//Do something as your wish
break;
}
return true;
}
};
private Handler handler = new WeakRefHandler(Looper.getMainLooper(), callback);
public final class WeakRefHandler extends Handler {
private static class WeakRefCallback implements Callback{
private WeakReference<Callback> callbackRef;
private WeakRefCallback(Callback callback){
callbackRef = new WeakReference<Callback>(callback);
}
@Override
public boolean handleMessage(Message msg) {
if(callbackRef != null){
Callback cb = callbackRef.get();
if(cb != null){
return cb.handleMessage(msg);
}
}
return false;
}
}
public WeakRefHandler(Looper looper, Callback callback) {
super(looper, new WeakRefCallback(callback));
}
public WeakRefHandler(Callback callback){
super(Looper.myLooper(), new WeakRefCallback(callback));
}
}