Das Verständnis, was "Looper" über die in Android
Musste ich fügen Sie Looper auf den folgenden code:
public class MyRunnable implements Runnable
{
@Override
public void run()
{
Looper.prepare();
final Looper looper = Looper.myLooper();
new Handler().postDelayed(
new Runnable()
{
@Override
public void run()
{
try
{
}
catch (Exception ex)
{
}
finally
{
looper.quit();
}
}
}, 100);
Looper.loop();
}
}
Bemerken, dass ich einen Thread innerhalb einer runnable. Die verschachtelten runnable ausgeführt durch einen Handler. Zunächst hatte ich nicht Looper, aber Android beschwert, dass ich brauchte, um Anruf-Greifer.bereiten Sie vor der Ausführung von einem anderen thread.
Lese ich bis auf "Looper", aber es scheint immer noch irgendwie kryptisch. Es scheint zu wirken wie eine Art interne messaging-pipeline. Es ist nicht klar für mich, warum dies ist notwendig, da es keine Nachrichten von meinem äußeren lauffaehig auf meine innere lauffähig. Obwohl, das ist wahr, es scheint, dass Android nur macht die harte Regel, dass, wenn Sie nennen ein thread aus einem thread, Sie MÜSSEN auch call-Looper.bereiten Sie. Auch wenn ich akzeptiere, dass als-ist, es immer noch nicht helfen zu verstehen, warum muss ich anrufen looper.Schleife und looper.beenden Sie. Wenn ich das weglasse Looper.loop, mein Handler läuft nicht und das ist das, was nicht klar ist. Was heißt "Looper".Schleife machen, die erlaubt, dass meine Hf zu laufen?
Irgendwie erklärt es. Das größte problem, das ich sehe, ist die Bezugnahme auf Runnables, die als "Nachrichten". Das sind keine "Nachrichten" im traditionellen Sinne von der Welt des Programmierens, da ein Runnable ist ein ausführbares Stück code, anstatt einfach Daten mit einer Meldung an. Außerdem, das Beispiel, das Sie wies auf noch nicht einmal looper.beenden Sie die erforderlich ist, noch zeigt es, dass "Looper".die Schleife wird unendlich lange blockieren, bis "looper".beenden aufgerufen wird. "Looper" sollte definiert werden als nichts anderes als eine Warteschlange für die Ausführung von mehreren Runnables.
InformationsquelleAutor AndroidDev | 2013-07-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein großer Artikel darüber.
Looper und Handler in Android
Kommt es zusammen mit einem einfachen schema, das führt zu geraden Verständnis der Beziehung zwischen Loopers und Handler.
In diesem schema sehen wir, dass, im selben thread (dargestellt durch das große Rechteck), egal wie viele handler, die Sie erstellen, werden Sie alle werden mit der gleichen Looper, d.h., die einzigartige looper von diesem thread.
Hinweis:
Looper zu vorbereitet, damit verknüpfte handler verarbeiten Nachrichten.
Applikation für Android, genauer gesagt android-app-UI-thread(main-thread), kommt bereits mit einer vorbereiteten looper (der mainLooper).
Hier ist, wie Die Kommunikation mit dem UI-Thread.
InformationsquelleAutor Pascal
Einem einfachen Konzept des Greifers:
Jeden worker-thread-erstellen Sie und führen Sie endet, sobald es führt seine Letzte operation.
Um zu verhindern, dass Ihre thread-Beendigung können Sie eine Schleife durch den Aufruf
Looper.loop()
, betrachten Sie es alswhile(true){}
- Anweisung. Vor dem AufrufLooper.loop()
Sie haben zur Vorbereitung der Schleife mitLooper.prepare()
, wenn es nicht bereit noch.Zum beenden der Schleife und das Ende Ihrer Gewinde Sie benötigen, rufen Sie
looper.quit()
auf den Greifer.Nun für die Benachrichtigung, die Sie von Android:
Wenn Sie einen Handler erstellen, in einem thread, es wird an den thread erstellt und wenn Sie post runnable mit dieser Prozedur wird der code ausgeführt, der auf das Gewinde von der Hf.
So, wenn das system sah, dass Sie wollen, um einige code (vor allem 100ms in Zukunft) auf einen Handler, der gebunden ist an einen thread, der sterben wird, sobald Sie beendet den Aufruf der post-Methode, die es vorgeschlagen
Looper.loop()
um zu verhindern, dass dieser thread beendet und damit Sie richtig ausführen der zweiten Lauffähig), die in einem bestehenden thread.InformationsquelleAutor MikeL
Ich finde das tutorial sehr hilfreich für das Verständnis des Konzepts von "looper".
Intro zu looper und handler
InformationsquelleAutor oks16