WeakReference
我的静态处理程序有一个Activity
(这是为了防止有据可查的内存泄漏问题)。
我发布了一条很长的延迟消息,我希望将此消息传递到我的活动(应该在前台)。
我担心的是,在方向改变时,我的活动被破坏了,并且处理程序引用了应该被破坏的旧活动。
为了在我onCreate
的活动中解决这个问题,我这样做了。
if(mHandler == null)
mHandler = new LoginHandler(this);
else {
mHandler.setTarget(this);
}
我的处理程序被声明为静态全局变量:
private static LoginHandler mHandler = null;
并且实现类也是静态的,如下所示:
private static class LoginHandler extends Handler {
private WeakReference<LoginActivity> mTarget;
LoginHandler(LoginActivity target) {
mTarget = new WeakReference<LoginActivity>(target);
}
public void setTarget(LoginActivity target) {
mTarget = new WeakReference<LoginActivity>(target);
}
@Override
public void handleMessage(Message msg) {
// process incoming messages here
LoginActivity activity = mTarget.get();
switch (msg.what) {
case Constants.SUCCESS:
activity.doSomething();
break;
default:
activity.setStatusMessage("failed " + msg.obj, STATUS_TYPE_DONE);
}
}
}
我想知道的是更改 WeakReference 是否有问题onCreate
是否有问题,或者这种方法还有其他问题吗?
谢谢,