我的静态处理程序对我的活动有一个弱引用(这是为了防止出现已知的内存泄漏问题)。
我发布了一条延迟很长的消息,希望这条消息被传递到我的活动中(该活动应该在前台)。
我的担忧是,在方向变化时,我的活动会被销毁,而处理程序则对旧活动保留着引用,但应该已经被销毁了。
为了解决这个问题,在活动的onCreate方法中,我做了如下操作。
我的处理程序声明为静态全局变量:
我想知道在onCreate中更改WeakReference是否存在问题,或者这种方法还有其他问题吗?
谢谢。
我发布了一条延迟很长的消息,希望这条消息被传递到我的活动中(该活动应该在前台)。
我的担忧是,在方向变化时,我的活动会被销毁,而处理程序则对旧活动保留着引用,但应该已经被销毁了。
为了解决这个问题,在活动的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);
}
}
}
我想知道在onCreate中更改WeakReference是否存在问题,或者这种方法还有其他问题吗?
谢谢。