Holen Sie sich Haupt-thread message queue handler und
Wie bekomme ich die message queue des main Threads aus einem anderen thread? Looper.getMainLooper() wird der Haupt-thread ' s "looper" aber ich bin nicht in der Lage, einen Weg zu finden, um die MessageQueue für einen anderen thread ist "looper". Außerdem, wie bekomme ich die handler für die wichtigsten looper? Ich bin nicht in der Lage zu finden, jeder Weg, um es zu bekommen.
Warum? Sie sollten nicht brauchen, um Durcheinander mit dem queue direkt.
Ich möchte nur hinzufügen, eine idleHandler zu überprüfen, wenn der Haupt-thread etwas zu tun
Ich irgendwie prüfen, ob der Haupt-thread die messagequeue ist leer. Ich bin neu in diese Konzepte war und denken mit idleHandler, um benachrichtigt zu werden, wenn die Warteschlange leer ist.
"Ich irgendwie prüfen, ob der Haupt-thread die messagequeue ist leer" - warum? Was ist das geschäftliche problem, das Sie lösen möchten? Wenn Sie "neu, um diese Konzepte", Sie sollten nicht innerhalb von 10km von der message queue, IMHO. So, ich bin versucht zu bestimmen, was es ist, dass Sie hoffen, zu erreichen, durch diese Vorgehensweise, in der Hoffnung, dass ich finden kann, eine bessere, einfachere Lösung für Sie.
Dann haben Sie den Haupt-thread registrieren
Ich möchte nur hinzufügen, eine idleHandler zu überprüfen, wenn der Haupt-thread etwas zu tun
Ich irgendwie prüfen, ob der Haupt-thread die messagequeue ist leer. Ich bin neu in diese Konzepte war und denken mit idleHandler, um benachrichtigt zu werden, wenn die Warteschlange leer ist.
"Ich irgendwie prüfen, ob der Haupt-thread die messagequeue ist leer" - warum? Was ist das geschäftliche problem, das Sie lösen möchten? Wenn Sie "neu, um diese Konzepte", Sie sollten nicht innerhalb von 10km von der message queue, IMHO. So, ich bin versucht zu bestimmen, was es ist, dass Sie hoffen, zu erreichen, durch diese Vorgehensweise, in der Hoffnung, dass ich finden kann, eine bessere, einfachere Lösung für Sie.
Dann haben Sie den Haupt-thread registrieren
IdleHandler
und informiert die anderen Parteien über irgendeine Art von listener-Mechanismus. Ich sehe nicht, das müssen einige andere Threads, die dies tun. "Für all dies, ich bin in der Tat müssen die änderungen irgendwo in den Android-framework" -- wahrscheinlich durchaus ein paar änderungen.InformationsquelleAutor r.v | 2011-07-02
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
@r.v,
Hatte ich ein ähnliches Bedürfnis. Ich wollte wissen, Wann die MessageQueue ist leer und wenn ich etwas für es zu tun, und ich möchte wissen, wenn es leer ist mit dem übrigen nichts zu tun. Ich schaute auf die
MessageQueue.IdleHandler
und festgestellt, dass es sich nicht so Verhalten, wie ich wollte, ich kam mit einer anderen Lösung.In meinem Fall wollte ich mit dem Looper/Handler-Mechanismus, um nacheinander ausführen Datei-downloads. Grundsätzlich ist jeder download ich ausführen möchten ist verpackt in eine Runnable. Ich will nur eine zu einem Zeitpunkt ausgeführt werden, so dass dieses Muster funktioniert auch ohne zu Graben in die Muttern und Schrauben eines mehr beteiligt threading-Lösung. Darüber hinaus wollte ich wissen, wenn ich zuerst etwas in die Warteschlange und beginnt seine Arbeit, und wollte wissen, Wann es war völlig fertig (queue ist leer).
War ich in der Lage zu verwenden, die hf-Nachricht-Mechanismus um dies zu erreichen. Die Nachrichten verarbeitet werden, in der Folge mit den Runnables, so können Sie strategisch platzieren Sie Nachrichten in der Warteschlange, um zu helfen, Sie wissen, die Bedingungen der Warteschlange. Im Gegensatz zu mit Runnables in der Handler-Warteschlange, es gibt einige Abfrage-und Abbau-Eigenschaften, die für Nachrichten, die letztlich die Lösung.
Was ich Tue, jedes mal, wenn ich einen Thread zu der Hf (über
Handler.post
), die ich auch entfernen Sie alle Instanzen von benutzerdefiniertenQUEUE_EMPTY
Nachricht, dann fügen Sie eine frischeQUEUE_EMPTY
Nachricht. Dieser sorgt dafür, dass ich eineQUEUE_EMPTY
Nachricht am Ende der Warteschlange. Sobald ich die Begegnung mit derQUEUE_EMPTY
Nachricht in meinem Unterklassen-Handler, ich weiß, dass ich mich am Ende der Warteschlange. Außerdem, wenn ich nicht finden, eineQUEUE_EMPTY
Nachricht in der Warteschlange, wenn ich gehe, fügen Sie ein runnable, ich weiß, dass die Warteschlange leer war und der thread war im Leerlauf.Als einige sich schnell zeigen wird, gibt es einige echte Ineffizienzen mit dieser Lösung. Nachdem Durchlaufen der Warteschlange für diese "marker" werden die Nachrichten möglicherweise ein echtes performance-Problem, wenn es eine große Anzahl von Einträgen in der queue. In meinem Fall, ich beschäftige mich mit nur einer Handvoll von Datei-downloads in einer Zeit, so dass jede Leistung die Strafen sind gering. Wenn Sie eine ähnliche situation, ich denke, das ist eine ziemlich vernünftige Lösung. Es wäre schön gewesen, für die Android-SDK zur Verfügung, um diese grundlegenden Fähigkeiten, um den
MessageQueue
. Ich Stimme im Idealfall würden Sie nicht zu verwirren wollen mit der MessageQueue, aber zu wissen, Wann er sich im Leerlauf befindet/arbeitet/leer scheinen, wie vernünftige Dinge, und ich bin sicher, es gibt zahlen von Szenarien, wenn es ist Wert zu wissen, diese Dinge.InformationsquelleAutor Craig B
Verwenden Sie die Handler-Klasse, um die Interaktion mit einem Looper eine Nachrichtenwarteschlange.
Interaktion mit dem main thread-message-queue,
Nun können Sie senden, löschen und empfangen von Nachrichten.
InformationsquelleAutor Some Noob Student
Nachdem Sie die wichtigsten threads looper, sollten Sie nur in der Lage sein zu rufen myQueue, um die wichtigsten threads MessageQueue.
http://developer.android.com/reference/android/os/Looper.html#myQueue%28%29
Sorry, habe ich falsch verstanden, die Frage. MessageQueue ist eine interne Struktur, und ich bin mir nicht sicher, ob Android ermöglicht Ihnen den Zugang direkt von außen den thread. Was willst du mit der MessageQueue, wenn Sie es bekommen, die nicht getan werden kann mit der Haupt-thread handler und looper?
Ich möchte hinzufügen eines idleHandler zu überprüfen, wenn der Haupt-thread nichts zu tun. Übrigens, ich brauche auch die handler für den Haupt-thread - habe ich bearbeitet meine Frage für diese.
siehe auch die Kommentare zu @CommonsWare oben.
InformationsquelleAutor RAnderson