2012-04-04 8 views
1

Ausgehend von der grundlegenden Java-Welt weiß ich, es gibt eine Möglichkeit, einen Thread zu spawnen, indem Sie ein neues Runnable erstellen und es an einen neuen Thread übergeben und den Aufruf starten. Etwas wie:Was ist der bevorzugte Weg, um einen neuen Thread zu erstellen?

Runnable r = new Runnable() { 
    @Override 
    public void run(){ 
    } 
} 

new Thread(r).start() 

Verbinden Sie nun die Android Welt scheint das Android Ökosystem ein paar andere Möglichkeiten, einen Thread zu erzeugen. Einer von ihnen ist Activity.runOnUiThread (um Dinge auf der Benutzeroberfläche erledigen zu können) und Handler.post (runnable).

Worüber ich mich wundere ist, was ist die bevorzugte Android-Methode, einen neuen Thread hervorzubringen. Ich mache vielen Fall sehen, wie:

Handler handler = new Handler() 
handler.post(r) 

Gibt es einen guten Grund Handler zu verwenden, um einen Thread zu erzeugen im Gegensatz zu einer neuen Thread alte Art und Weise zu schaffen?

Danke. Yev

Antwort

2

Überprüfen Sie die AysncTask framework. Es sieht so aus, als ob Google möchte, dass Sie mit Threads umgehen ... obwohl Sie Standard-Java-Threading verwenden können.

+1

Absolut richtig. Hier ist ein tolles Tutorial, das Android "Threads", "Async Tasks" und "Handler" beschreibt: http://www.vogella.de/articles/AndroidPerformance/article.html – paulsm4

+0

Danke ... das erklärt einige meiner Bedenken. – ymotov

0

Handler soll Thread nicht spawnen, aber zu post neue Aufgabe zu UI-Thread. IMO die Art und Weise zu spawnen Thread ist der Java-Weg, durch lauffähige oder erweiterte Thread direkt. Die Android-Entwickler haben einen Executor um die Async-Aufgabe gewickelt und eine Methode angezeigt, die direkt im UI-Thread ausgeführt wird, und eine, mit der Sie Ihre Aufgabe im Hintergrund ausführen können.

1

Der Handler in der Art, wie Sie ihn demonstriert haben, erzeugt keinen neuen Thread. Handler sind keine Threads, sondern eher ein Mittel des IPC, um einem Thread zu sagen, dass ein anderer Thread Code ausführen soll. Sie spawnen immer noch auf die gleiche Weise aus Threads, aber der Handler hilft diesen Threads besser zu kommunizieren.

Nehmen wir zum Beispiel, haben Sie ein Thema, das Sie schon im Hintergrund auf die übliche Art und Weise hervorgebracht aus:

Runnable r = new Runnable() { 
    @Override 
    public void run(){ 
    } 
} 

new Thread(r).start() 

Es läuft im Hintergrund Verarbeitung zu tun, aber es muss die Benutzeroberfläche aktualisieren, mit es ist Fortschritt, so ruft es zurück auf die Aktivität:

onProgress(int progress) { 
    // update UI 
} 

Wenn Sie diesen Code als ausgeführt wird, wird es eine Ausnahme, da nur der UI-Thread die Benutzeroberfläche zu aktualisieren erlaubt ist. Handler können dieses Problem wie folgt lösen:

public void onProgress (int Ergebnisse) { mHandler.post (neuer UIUpdater (Ergebnisse)); }

private class UIUpdater implements Runnable { 
    UIUpdater(int results) { 
    //construct whatever... 
    } 

    @Override 
    public void run() { 
    //Update UI 
    } 
} 

Alternativ können Sie Android verwalten Themen und Handlers für Sie durch den AsyncTask Rahmen

+0

Danke JRaymond ... Ich denke, AsyncTask ist, was ich gesucht habe. – ymotov

Verwandte Themen