Sie sind auf Seite 1von 15

5.

Threads, Serverprozesse und Benachrichtigungen

Threads in Android

Prozesse und 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

5. Threads, Serverprozesse und Benachrichtigungen

Threads in Android

Application Not Responding (ANR)

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

5. Threads, Serverprozesse und Benachrichtigungen

Threads in Android

Threads und UI-Operationen

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

5. Threads, Serverprozesse und Benachrichtigungen

Threads in Android

Callback fur Threads (1)

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

Mobile Informationssysteme I Hochschule Bonn-Rhein-Sieg, SS 2010

336

5. Threads, Serverprozesse und Benachrichtigungen

Threads in Android

Callback fur Threads (2)

Beispiel 5.1. Update einer TextView aus dem Hintergrund-Thread lst eine Exception o aus.

Mobile Informationssysteme I Hochschule Bonn-Rhein-Sieg, SS 2010

337

5. Threads, Serverprozesse und Benachrichtigungen

Threads in Android

Callback fur Threads (3)

Beispiel 5.2. Update einer TextView ber u eine gemeinsame Variable. Problem: Keine sofortige Aktualisierung bei Thread-Ende.

Mobile Informationssysteme I Hochschule Bonn-Rhein-Sieg, SS 2010

338

5. Threads, Serverprozesse und Benachrichtigungen

Threads in Android

Callback fur Threads (4)

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

Mobile Informationssysteme I Hochschule Bonn-Rhein-Sieg, SS 2010

339

5. Threads, Serverprozesse und Benachrichtigungen

Threads in Android

Callback fur Threads (5)

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

5. Threads, Serverprozesse und Benachrichtigungen

Threads in Android

Callbacks mit Runnable (1)

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

5. Threads, Serverprozesse und Benachrichtigungen

Threads in Android

Callbacks mit Runnable (2)

Beispiel 5.3. Update einer TextView aus dem Hintergrund-Thread heraus mittels Handler und Runnable. Diesmal wird keine Exception ausgelst. o

Mobile Informationssysteme I Hochschule Bonn-Rhein-Sieg, SS 2010

342

5. Threads, Serverprozesse und Benachrichtigungen

Threads in Android

Callbacks mit Runnable (3)

Alternativen zu post(): postAtTime(Runnable r, long uptimeMillis) postDelayed(Runnable r, long delayMillis)

Mobile Informationssysteme I Hochschule Bonn-Rhein-Sieg, SS 2010

343

5. Threads, Serverprozesse und Benachrichtigungen

Threads in Android

Callbacks mit Message (1)

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

5. Threads, Serverprozesse und Benachrichtigungen

Threads in Android

Wirkung: im UI-Thread wird handleMessage() der spezialisierten Handler-Klasse ausgefuhrt

Mobile Informationssysteme I Hochschule Bonn-Rhein-Sieg, SS 2010

345

5. Threads, Serverprozesse und Benachrichtigungen

Threads in Android

Callbacks mit Message (2)

Beispiel 5.4. Update einer TextView aus dem Hintergrund-Thread heraus mittels spezialisiertem Handler und Message. Es wird keine Exception ausgelst. o

Mobile Informationssysteme I Hochschule Bonn-Rhein-Sieg, SS 2010

346

5. Threads, Serverprozesse und Benachrichtigungen

Threads in Android

Callbacks mit Message (3)


Alternativen zu sendMessage(): sendEmptyMessage(int what) sendMessageAtTime(Message msg, long uptimeMillis) sendMessageDelayed(Message msg, long delayMillis) Ein Message-Objekt hat ein Attribut obj vom Typ Object. Message msg = new Message(); msg.obj = new String("hello world!");

Mobile Informationssysteme I Hochschule Bonn-Rhein-Sieg, SS 2010

347

Das könnte Ihnen auch gefallen