2013-06-16 12 views
14

Kann jemand erklären, warum Handler einen runnable schreiben? Überschreibt HandleMessage und das Senden einer Nachricht das Gleiche?Android: Warum buchen Handler eine ausführbare Datei?

Ich habe etwas ungeprüften Code geschrieben, um zu zeigen, wie ich denke, dass diese beiden Möglichkeiten implementiert werden. Bitte korrigiere mich, wenn ich falsch liege.

Handler mit Beitrag:

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

Handler mit handle:

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

handler.sendMessage(message); 

Antwort

11

Beide Code-Schnipsel die gleiche Arbeit, die üblicherweise verwendeten Handler.postRunnable wenn Sie einen Code auf die ausgeführt werden soll UI-Thread ohne etwas über Ihre Handler Objekt zu wissen. Es macht in vielen Fällen Sinn, wenn auf dem UI-Thread beliebiger Code ausgeführt werden muss.

Aber in einigen Fällen Sie organisieren wollen, was mit dem UI-Thread und haben spezielle Funktionen, die Sie wollen, dass die Art und Weise auszuführen gesendet wird Sie nachrichts verwenden können.

Ich glaube nicht, dass es eine Leistungseinbuße für die Verwendung von einem über dem anderen gibt. Es liegt an Ihnen, zu verwenden, was immer Sie für besser halten.

+0

Nun, es gibt einen sehr, sehr kleinen Leistungseinbruch für das Erstellen eines neuen Objekts (das runnable). Aber es ist vernachlässigbar. – eordano

+2

Wenn Sie jedoch den Code auf dem UI-Thread ausführen möchten, müssen Sie den Handler im UI-Thread erstellen oder "new Handler (Looper.getMainLooper())" verwenden. Mit "new Handler()" erstellen Sie einen Handler im aktuellen Thread, der nicht der Hauptthread sein muss. – Kuno

Verwandte Themen