Il mio gestore statico ha un WeakReference
sul mio Activity
(questo per evitare il problema di perdita di memoria ben documentato).Gestore Android che modifica WeakReference
Inserisco un messaggio ritardato e desidero inviare questo messaggio alla mia attività (che dovrebbe essere in primo piano).
La mia preoccupazione è che il cambiamento di orientamento, la mia attività è distrutta e il gestore ha un riferimento alla vecchia attività che avrebbe dovuto essere distrutto.
Al fine di aggirare questo nel mio onCreate
per l'attività faccio questo.
if(mHandler == null)
mHandler = new LoginHandler(this);
else {
mHandler.setTarget(this);
}
E il mio gestore viene dichiarata come variabile globale statica:
private static LoginHandler mHandler = null;
e la classe che implementa è anche statica, come di seguito:
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);
}
}
}
Quello che voglio sapere è se ci c'è qualcosa di sbagliato nel cambiare WeakReference su onCreate
o c'è qualcos'altro che non va in questo approccio?
Grazie,
@CommonsWare alcuna opinione su questo? – Ali