Мой статический обработчик имеет WeakReference
для моего Activity
(это предотвращает проблему документированной утечки памяти).Android Handler change 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);
}
}
}
То, что я хочу знать, если есть что-то не так с изменением WeakReference на onCreate
или что-то еще не так с этим подходом?
Спасибо,
@CommonsWare какое-либо мнение по этому поводу? – Ali