Heim >Java >javaLernprogramm >Wie gehe ich mit Cross-Thread-Kommunikation in Android-Diensten um?
In Android-Diensten wird Multithreading häufig verwendet, um ressourcenintensive Aufgaben auszuführen, ohne den Haupt-UI-Thread zu blockieren. Es treten jedoch Situationen auf, in denen ein Hintergrundthread mit dem Hauptthread interagieren muss, beispielsweise um Aufgaben in seine Nachrichtenwarteschlange zu stellen.
Um dies zu beheben, stellt das Android-Framework Mechanismen für die Thread-übergreifende Kommunikation mithilfe von Handlern bereit. Ein Handler ist ein Objekt, das Nachrichten auf einem angegebenen Looper verarbeiten kann. Durch die Verwendung eines Handlers, der dem Looper des Hauptthreads zugeordnet ist, können Aufgaben von anderen Threads in die Nachrichtenwarteschlange des Hauptthreads gepostet werden.
Lösung 1: Verwendung eines Kontextobjekts
Wenn der Hintergrundthread einen Verweis auf ein Kontextobjekt hat (entweder den Anwendungskontext oder den Dienstkontext), können Sie auf den Handler des Hauptloopers zugreifen folgt:
// Get a handler that can be used to post to the main thread Handler mainHandler = new Handler(context.getMainLooper()); // Prepare a Runnable task to be posted Runnable myRunnable = new Runnable() { @Override public void run() {....} // This is your code }; // Post the task to the main thread mainHandler.post(myRunnable);
Lösung 2: Ohne Kontextobjekt
Wenn der Hintergrundthread keinen Zugriff auf ein Kontextobjekt hat, können Sie einen direkteren Ansatz verwenden wie von @dzeikei vorgeschlagen:
// Get a handler that can be used to post to the main thread Handler mainHandler = new Handler(Looper.getMainLooper()); // Prepare a Runnable task to be posted Runnable myRunnable = new Runnable() { @Override public void run() {....} // This is your code }; // Post the task to the main thread mainHandler.post(myRunnable);
Das obige ist der detaillierte Inhalt vonWie gehe ich mit Cross-Thread-Kommunikation in Android-Diensten um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!