Verstehen, was Looper in Android ist

Ich musste Looper zum folgenden Code hinzufügen:

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(); } } 

Beachten Sie, dass ich eine Laufzeit in einem Runnable habe. Das verschachtelte Runnable wird durch einen Handler ausgeführt. Zuerst hatte ich keine Looper, aber Android beschwerte sich, dass ich Looper.prepare anrufen musste, bevor ich einen anderen Thread ausführte.

Ich lese auf Looper, aber es scheint immer noch kryptisch. Es scheint, wie eine Art interne Messaging-Pipeline zu handeln. Es ist mir nicht klar, warum dies notwendig ist, da es keine Meldungen gibt, die von meinem äußeren Runnable zu meinem inneren Runnable gehen. Auch wenn das stimmt, scheint es, dass Android nur die harte Regel, dass, wenn Sie einen Thread aus einem Thread rufen, müssen Sie auch Looper.prepare. Auch wenn ich das akzeptiere, ist es immer noch nicht zu verstehen, warum ich looper.loop und looper.quit anrufen muss. Wenn ich Looper.loop weglasse, läuft mein Handler nie und das ist was nicht klar ist. Was macht Looper.loop so, dass mein Handler laufen kann?

  • Führen Sie Handler-Nachrichten in einem Hintergrund-Thread
  • Aktualisierung der Benutzeroberfläche mit Runnable & postDelayed funktioniert nicht mit Timer-App
  • Wo kann ich ScheduledThreadPoolExecutor, TimerTask oder Handler erstellen und verwenden?
  • Stopp Handler (). PostDelay
  • Stornierung eines Handler.postdelayed Prozesses
  • Zugriff auf UI-Thread-Handler von einem Dienst
  • Handler verwenden, um in UI Thread zu posten
  • Handler.sendMessageDelayed (msg, delay) funktioniert nicht richtig
  • 3 Solutions collect form web for “Verstehen, was Looper in Android ist”

    Hier ist ein toller Artikel darüber.

    Looper und Handler in Android

    Es kommt mit einem einfachen Schema, das zu einem geringen Verständnis der Beziehung zwischen Loopers und Handler führt .

    Auf diesem Schema sehen wir, dass innerhalb des gleichen Threads (dargestellt durch das große Rechteck), egal wieviel Handler du erschaffst, sie alle den gleichen Looper verwenden , dh den einzigartigen Looper dieses Threads.

    Handler & Loopers

    Hinweis :

    Looper muss bereit sein , den zugehörigen Handler zu erlauben, gebuchte Nachrichten zu verarbeiten.

    Android-Anwendung, genauer, Android App UI Thread (der Haupt-Thread), kommt bereits mit einem vorbereiteten Looper (die mainLooper ).

    Hier ist die Kommunikation mit dem UI Thread .

    Ein einfaches Konzept des Loppers:

    1. Jeder Arbeiter-Thread, den du erstellt hast, endet, sobald er seine letzte Operation ausführt.

    2. Um deine Looper.loop() zu verhindern, kannst du eine Schleife Looper.loop() indem Looper.loop() , denkst du als while(true){} Anweisung. Vor dem Aufruf von Looper.loop() musst du die Loop mit Looper.prepare() vorbereiten, wenn es noch nicht vorbereitet ist. Um die Schleife zu beenden und deinen Thread zu beenden, musst du looper.quit() auf dem Looper anrufen.

    Jetzt für die Benachrichtigung hast du von Android:

    Wenn du einen Handler in einem Thread kreierst, wird er an den Thread gebunden, den es erstellt hat und wann du diesen Handler mit dem Handler betreibst, läuft der Code auf dem Thread des Handlers.

    Also, wenn das System sah, dass Sie einige Code (vor allem 100ms in der Zukunft) auf einem Handler laufen lassen, der an einen Thread gebunden ist, der sterben wird, sobald er mit dem Aufruf der Post-Methode Looper.loop() schlug es vor, Looper.loop() Um zu verhindern, dass dieser Thread abgebrochen wird und damit Sie den zweiten Runnable in einem noch vorhandenen Thread richtig laufen lassen.

    Ich finde das folgende Tutorial sehr hilfreich bei der Verständnis der Konzept der Looper.
    Intro zu Looper und Handler

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.