私の静的ハンドラにはWeakReference
to myがあります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
またはこのアプローチに他に問題があるかどうかです。
ありがとう、