Esistono diversi modi per aggiornare l'interfaccia utente e modificare uno View
come un TextView
dall'esterno del thread dell'interfaccia utente. A Handler
è solo un metodo.
Ecco un esempio che consente a un singolo Handler
di rispondere a vari tipi di richieste.
a livello di classe definiscono un semplice Handler
:
private final static int DO_UPDATE_TEXT = 0;
private final static int DO_THAT = 1;
private final Handler myHandler = new Handler() {
public void handleMessage(Message msg) {
final int what = msg.what;
switch(what) {
case DO_UPDATE_TEXT: doUpdate(); break;
case DO_THAT: doThat(); break;
}
}
};
aggiornare l'interfaccia utente in una delle vostre funzioni, che è ora sul thread UI:
private void doUpdate() {
myTextView.setText("I've been updated.");
}
Dall'interno vostro compito asincrona, invia un messaggio allo Handler
. Ci sono molti modi per farlo. Questo può essere il più semplice:
myHandler.sendEmptyMessage(DO_UPDATE_TEXT);
Che dire di 'classe Handler deve essere statico altrimenti le perdite di memoria potrebbero occur' avvertimento? – nmxprime
si prega di trovare il [** Blog post **] (http://www.androiddesignpatterns.com/2013/01/inner-class-handler-memory-leak.html) e questa risposta (http://stackoverflow.com/questions/11407943/this-handler-class-should-be-static-or-leaks-might-happen-incominghandler) per avere maggiori informazioni su questo –
raccomando weakHandler qui per evitare perdite. https://github.com/badoo/android-weak-handler – j2emanue