2009-08-01 5 views
2

Ich habe eine Klasse, die Activity und ich erstreckt bin versucht, ein Objekt dieser Klasse in einer normalen Java-Klasse zu schaffen, aber es wirft mich eine Ausnahme:ein Objekt von Android Aktivitätsklasse Erstellen

Can't create handler inside thread that has not called looper.prepare

Was mache ich falsch?

Vielen Dank im Voraus.

+0

wie auf der Erde erwarten Sie, dass jemand Ihnen hilft, wenn Sie nicht eine ausführliche Frage posten können? –

Antwort

1

Der Handler wird in dem Thread ausgeführt, der ihn erstellt hat. Wenn Sie also die Instanz der neuen Klasse nicht im Benutzeroberflächen-Thread erstellen, wird der Handler nicht im Benutzeroberflächen-Thread ausgeführt und Sie haben ein Problem.

Ich habe einmal versucht, GUIs für die Leistung Gründen in einem separaten Thread aufzublasen. Ich habe kein Fenster bei dieser Punkt berührt, aber beim Aufblasen bekam ich die gleiche Fehlermeldung und ich lief nur Looper.prepare() in meinem Thread und alle war gut.

Ein Looper führt die Nachrichtenschleife eines Threads aus. Wenn Sie Looper.prepare() (und dann Looper.loop()) in einem Thread nicht aufrufen, wird der Thread keine Nachrichtenschleife haben, so kann nicht Handler-Objekte, die Nachrichten akzeptieren.

4

Sie sollten auf dem Spiel application fundamentals von android apps

Ich kann nicht denken Sie an einem Beispiel lesen, wo Sie eine Aktivität benötigen würde sich das Objekt erstellen. Sie sollten den Aufruf Context.startActivity() verwenden, um eine Aktivität zu starten.

Wie auch immer, um Ihre Frage zu beantworten - eine Aktivität implementiert eine Nachrichtenwarteschlange (mit einem Handler), wo Nachrichten an den laufenden Thread der Aktivität gesendet werden können, um bestimmte Aufgaben auszuführen. Das bedeutet, dass der Thread, der den Aktivitätscode ausführt, weiterhin auf diese Nachrichten wartet (ein Beispiel für diese Nachrichten ist die Reaktion der Benutzer auf die Benutzeroberfläche Ihrer Anwendung). Um dies zu tun, müssen Sie einen Looper-Thread verwenden, der die Nachrichten "durchläuft" (oder in gewisser Weise wartet), damit sie reagieren können. Der Hauptthread für Ihre Anwendung, der auch die Benutzeroberfläche für Ihre Anwendung darstellt, ist ein Looper-Thread.

Wenn Sie aus irgendeinem Grund ein Aktivitätsobjekt manuell erstellen müssen, sollten Sie überdenken, wie Sie Ihre Anwendung entwerfen. Verwenden Sie nur StartActivity.

Verwandte Themen