Beruflich Dokumente
Kultur Dokumente
Threads in Android
Jede gestartete Applikation ist eigener Prozess und luft in eigener Dalvik a VM Prozess startet User-Interface-Thread (UI-Thread), der fur die sichtba ren Bestandteile der Applikation zustndig ist. a Start-Activity (siehe Manifest) luft im UI-Thread a Problem: Aufwendige Berechnungen im UI-Thread lassen View einfrieren Unresponsiveness lost ANR aus
Mobile Informationssysteme I Hochschule Bonn-Rhein-Sieg, SS 2010 333
Threads in Android
Wird ausgelost wenn: eine Activity nicht innerhalb von 5 Sekunden auf Benutzereingaben reagiert, ein Broadcast Receiver nicht innerhalb von 10 Sekunden onReceive() beendet. Mgliche Konsequenz: o Auslagerung aufwendiger Berechnungen/Operationen in Threads
Mobile Informationssysteme I Hochschule Bonn-Rhein-Sieg, SS 2010 334
Threads in Android
Threads innerhalb eines Prozesses haben einen gemeinsamen Speicherbereich. Deshalb: Threads haben prinzipiell Zugri auf alle Objekte innerhalb einer Anwendung Aber: Zugri auf visuelle Komponenten nur uber den UI-Thread moglich, ansonsten Exception Konsequenz: Kommunikation zwischen Hintergrund-Thread und UIThread notwendig
Mobile Informationssysteme I Hochschule Bonn-Rhein-Sieg, SS 2010 335
Threads in Android
Typisches Szenario: Button-Click lost langandauernde Berechnung aus Auslagerung der langandauernden Berechnung in Hintergrund-Thread Ende der Berechnung soll z.B. in einer TextView angezeigt werden Problem: Anweisung textView.setText() ausgefuhrt im Hintergrund Thread lst Exception aus o
336
Threads in Android
Beispiel 5.1. Update einer TextView aus dem Hintergrund-Thread lst eine Exception o aus.
337
Threads in Android
Beispiel 5.2. Update einer TextView ber u eine gemeinsame Variable. Problem: Keine sofortige Aktualisierung bei Thread-Ende.
338
Threads in Android
Handler: Kommunikationsschnittstelle fur die Kommunikation zwischen Threads, Warteschlange fur Runnable- bzw. Message-Objekte Runnable: Objekte, die etwas ausfuhren konnen Message: Container fur Daten, z.B. Bundle
339
Threads in Android
Handler: Klasse android.os.Handler Verschicken und Verarbeiten von Runnable- bzw. Message-Objekten Handler-Instanz wird im UI-Thread erzeugt und an Hintergrund-Thread ubergeben Hintergrund-Thread legt Runnable- bzw. Message-Objekte in Handler ab Verarbeitung der empfangenen Objekte im UI-Thread
Mobile Informationssysteme I Hochschule Bonn-Rhein-Sieg, SS 2010 340
Threads in Android
Handler-Instanz in UI-Thread (Main Activity) erzeugen Runnable denieren und Runnable-Instanz in Main Activity erzeugen Hintergrund-Thread denieren und erzeugen, Verweis auf Handler und Runnable mitgeben, Hintergrund-Thread starten In run() des Hintergrund-Thread: Runnable im Handler ablegen mittels post() Wirkung: In Main Activity wird Runnable aus dem Handler ausgelesen und gestartet
Mobile Informationssysteme I Hochschule Bonn-Rhein-Sieg, SS 2010 341
Threads in Android
Beispiel 5.3. Update einer TextView aus dem Hintergrund-Thread heraus mittels Handler und Runnable. Diesmal wird keine Exception ausgelst. o
342
Threads in Android
343
Threads in Android
Spezialisierte Handler-Klasse erzeugen, dabei handleMessage() uber schreiben, in handleMessage() UI-Operationen durchfuhren In UI-Thread (Main Activity) Instanz des spezialisierten Handlers erzeugen, Verweis auf Main Activity mitgeben. Hintergrund-Thread denieren und erzeugen, Verweis auf Handler mitgeben, Hintergrund-Thread starten In run() des Hintergrund-Thread: Message erzeugen und im Handler ablegen mittels sendMessage()
Mobile Informationssysteme I Hochschule Bonn-Rhein-Sieg, SS 2010 344
Threads in Android
345
Threads in Android
Beispiel 5.4. Update einer TextView aus dem Hintergrund-Thread heraus mittels spezialisiertem Handler und Message. Es wird keine Exception ausgelst. o
346
Threads in Android
347