2013-06-16 9 views
14

Qualcuno può spiegare perché i gestori pubblicano un eseguibile? L'override di handleMessage e l'invio di un messaggio fanno la stessa cosa?Android: perché i gestori pubblicano un eseguibile?

Ho scritto un codice non verificato per mostrare come penso che questi due modi sarebbero stati implementati. Per favore correggimi se sbaglio nel mio approccio.

Handler con Post:

handler.post(new Runnable() { 
    @Override 
    public void run() { 
     imageView.doSomething(); 
    } 
}); 

Handler con handleMessage:

final Handler handler = new Handler() { 
    @Override 
    public void handleMessage(Message message) { 
     imageView.doSomething(); 
    } 
}; 

handler.sendMessage(message); 

risposta

11

Entrambi i frammenti di codice funzionano allo stesso, convenzionalmente si usa Handler.postRunnable quando si desidera eseguire del codice sul Filo UI senza dover conoscere nulla sull'oggetto dell'handler. Ha senso in molti casi in cui il codice arbitrario deve essere eseguito sul thread UI .

Ma in alcuni casi si desidera organizzare ciò che viene inviato al UI thread e hanno funzioni specifiche che si desidera eseguire in questo modo è possibile utilizzare sendMessage.

Non penso ci sia una penalità di prestazioni per l'utilizzo di uno sopra l'altro. Spetta a te, usare quello che pensi ti si addice di più.

+0

Bene, c'è un colpo molto piccolo per le prestazioni per la creazione di un nuovo oggetto (il runnable). Ma è trascurabile. – eordano

+2

Tuttavia, se si desidera eseguire il codice sul thread dell'interfaccia utente, è necessario creare il gestore nel thread dell'interfaccia utente oppure utilizzare "new handler (Looper.getMainLooper())". Con "new Handler()" crei un Handler nel thread corrente, che non deve essere il thread principale. – Kuno

Problemi correlati