"Application not responding" - Asynchronität in Android
-
Upload
open-knowledge-gmbh -
Category
Technology
-
view
328 -
download
0
description
Transcript of "Application not responding" - Asynchronität in Android
![Page 1: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/1.jpg)
Arne Limburg | open knowledge GmbH
@ArneLimburg @_openknowledge
![Page 2: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/2.jpg)
Arne Limburg | open knowledge GmbH
@ArneLimburg @_openknowledge
![Page 3: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/3.jpg)
Agenda
Einleitung
Performance
Asynchronität
![Page 4: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/4.jpg)
Prozesse & Threads
Prozess • Betriebssystemebene • Mindestens einer pro Applikation • Separat pro Komponente möglich • Gruppierung möglich
![Page 5: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/5.jpg)
manifest.xml <manifest ...> <activity ... android:process=":private.process" ... </activity> <activity ... android:process="de.openknowledge..." ... </activity> </manifest>
![Page 6: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/6.jpg)
Prozesszustände
• Foreground – Activity (active) – Service
(bound, startForeground, onStart, ...) • Visible (paused Activity) • Service (via startService) • Background (stopped Activity) • Empty
![Page 7: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/7.jpg)
Prozesse & Threads
Thread • Applikationsebene • Mindestens einer pro Applikation
(UI-Thread) • Weitere möglich àBlockieren des UI-Threads vermeiden
![Page 8: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/8.jpg)
Agenda
Einleitung
Performance
Asynchronität
![Page 9: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/9.jpg)
Agenda
Einleitung
in Jelly Bean
in einer App
Asynchronität Performance
![Page 10: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/10.jpg)
Agenda
Performance
Asynchronität
in Jelly Bean
in einer App
![Page 11: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/11.jpg)
What‘s new in Jelly Bean?
![Page 12: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/12.jpg)
What‘s new in Jelly Bean?
Performance-Gewinn durch „Project Butter“
![Page 13: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/13.jpg)
Was ist das?
![Page 14: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/14.jpg)
Project Butter
• VSync • Triple Buffering • Touch Responsiveness
![Page 15: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/15.jpg)
Und was bringt das?
![Page 16: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/16.jpg)
Was ist VSync?
http://schnurpsel.de/neue-qualitaet-bei-kommentar-spam-oder-alter-hut-223/
![Page 17: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/17.jpg)
Chet Haase, Romain Guy, Android UI Toolkit Engineers auf der Google I/O 2012
![Page 18: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/18.jpg)
Chet Haase, Romain Guy, Android UI Toolkit Engineers auf der Google I/O 2012
![Page 19: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/19.jpg)
Chet Haase, Romain Guy, Android UI Toolkit Engineers auf der Google I/O 2012
![Page 20: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/20.jpg)
Chet Haase, Romain Guy, Android UI Toolkit Engineers auf der Google I/O 2012
![Page 21: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/21.jpg)
Chet Haase, Romain Guy, Android UI Toolkit Engineers auf der Google I/O 2012
![Page 22: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/22.jpg)
Chet Haase, Romain Guy, Android UI Toolkit Engineers auf der Google I/O 2012
![Page 23: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/23.jpg)
Agenda
Performance
Asynchronität
in Jelly Bean
in einer App
![Page 24: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/24.jpg)
Agenda
Performance
Asynchronität
in Jelly Bean
in einer App
![Page 25: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/25.jpg)
Performance einer App
Performance-Probleme • Schlechte Architektur • Datei-Zugriff • Datenbank-Zugriff • Netzwerkzugriff • ... • Selten schlechter Java-Code!
![Page 26: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/26.jpg)
Lösung
Asynchronität
![Page 27: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/27.jpg)
Lösung
Niemals im UI-Thread • Langlaufende Berechnungen • Datei-Zugriff • Datenbank-Zugriff
(z.B. startManagingCursor) • Netzwerkzugriff • ...
![Page 28: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/28.jpg)
Agenda
Performance
Asynchronität
in Jelly Bean
in einer App
![Page 29: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/29.jpg)
Agenda
Performance
Asynchronität
in Jelly Bean
in einer App
![Page 30: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/30.jpg)
Asynchronität
Java-Bordmittel funktionieren auch in Android!
• Thread • ThreadPool • Future
![Page 31: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/31.jpg)
Thread public void someMethod() { Runnable runnable = new Runnable() { public void run() { // another thread } } new Thread(runnable).start(); }
![Page 32: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/32.jpg)
ThreadPool private ExecutorService pool = Executors.newFixedThreadPool(5); public void someMethod() { Runnable runnable = new Runnable() { public void run() { // another thread } } pool.execute(runnable); }
![Page 33: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/33.jpg)
Future public void someMethod() { Callable<Result> callable = new Callable() { public Result call () { // calculate result } } Future<Result> future = pool.submit(callable); Result result = future.get(); }
![Page 34: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/34.jpg)
Inter-Thread-Kommunikation
Wie kommen asynchron geholte Daten in den UI-Thread? CalledFromWrongThreadException • Problem: Future blockiert
(nicht geeignet für UI-Thread) • Lösung 1: Activity.runOnUiThread
![Page 35: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/35.jpg)
Activity.runOnUiThread public void someMethod() { Runnable runnable = new Runnable() { public void run() { // some business logic runOnUiThread(new Runnable() {…}); } } pool.execute(runnable); }
![Page 36: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/36.jpg)
Inter-Thread-Kommunikation
Wie kommen asynchron geholte Daten in den UI-Thread? • Lösung 1: Activity.runOnUiThread • Lösung 2: Handler
![Page 37: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/37.jpg)
Handler
• Verschicken von Nachrichten über Thread-Grenzen hinweg
• Bindung an den erzeugenden Thread Ø Im UI-Thread erzeugen Ø Von anderen Threads „Nachrichten“ an
den UI-Thread schicken
![Page 38: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/38.jpg)
Handler public class MyHandler extends Handler { public void handleMessage(Message message) { … // running in handler thread } … }
![Page 39: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/39.jpg)
Handler
Verschicken von Nachrichten • sendMessage • sendMessageAtTime • sendMessageDelayed • sendMessageAtFrontOfQueue
![Page 40: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/40.jpg)
Handler public void someMethod() { Message message = handler.obtainMessage(); … handler.sendMessage(message); }
![Page 41: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/41.jpg)
Handler
Ausführen von Aktionen • post • postAtTime • postDelayed • postAtFrontOfQueue
![Page 42: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/42.jpg)
Handler public void onCreate(Bundle saved) { handler = new Handler(); } public void someMethod() { Runnable runnable = new Runnable() { public void run() { handler.post(new Runnable() {…}); } } pool.execute(runnable);
![Page 43: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/43.jpg)
Inter-Thread-Kommunikation
Wie kommen asynchron geholte Daten in den UI-Thread? • Lösung 1: Activity.runOnUiThread • Lösung 2: Handler • Lösung 3: AsyncTask
![Page 44: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/44.jpg)
AsyncTask
Bietet • Callback-Funktionen in def. Threads
– doInBackground – onProgressUpdate – onPostExecute
• Parameter, Rückgabe-Wert, Progress-Info
![Page 45: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/45.jpg)
AsyncTask public class MyTask extends AsyncTask<A, P, R> { public R doInBackground(A… args) { … // running in background thread P progress = … publishProgress(progress); } … }
![Page 46: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/46.jpg)
AsyncTask public class MyTask extends AsyncTask<A, P, R> { … public void onProgressUpdate(P… p) { … // running in ui thread } public void onPostExecute(R… result) { … // running in ui thread } }
![Page 47: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/47.jpg)
AsyncTask
Nachteile: • Nur ein Parameter-Typ • Behandlung von Configuration-Changes
(z.B. Screen-Rotation) – onRetainNonConfigurationInstance – getLastNonConfigurationInstance – Mit Fragments: setRetainInstance
![Page 48: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/48.jpg)
Inter-Thread-Kommunikation
Wie kommen asynchron geholte Daten in den UI-Thread? • Lösung 1: Activity.runOnUiThread • Lösung 2: Handler • Lösung 3: AsyncTask • Lösung 4: Loader
![Page 49: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/49.jpg)
Loader
• Neu seit Android 3 (API Level 11) • Ersatz für startManagingCursor und Cursor.requery()
• Behandlung von Configuration-Changes LoaderManager.initLoader
• Requery über restartLoader • Kommunikation über LoaderCallbacks
![Page 50: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/50.jpg)
Code Diving ...
![Page 51: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/51.jpg)
Implementierung eines Loaders
• Ableiten von AsyncTaskLoader • Implementierung von loadInBackground()
• Optional: Überschreiben von – onCanceled – onReset
![Page 52: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/52.jpg)
Inter-Thread-Kommunikation
Wie kommen asynchron geholte Daten in den UI-Thread? • Lösung 1: Activity.runOnUiThread • Lösung 2: Handler • Lösung 3: AsyncTask • Lösung 4: Loader • Lösung 5: Services?
![Page 53: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/53.jpg)
Service
• Eigene Android-Komponente mit separatem Lebenszyklus
• Lang-laufende Operationen ohne UI-Interaktion
• Nicht per se asynchron
![Page 54: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/54.jpg)
Service Lebenszyklus
![Page 55: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/55.jpg)
IntentService public class MyIntentService extends IntentService { … public void onHandleIntent(Intent intent) { … } }
![Page 56: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/56.jpg)
Inter-Thread-Kommunikation
Wie kommen asynchron geholte Daten in den UI-Thread? • Lösung 1: Activity.runOnUiThread • Lösung 2: Handler • Lösung 3: AsyncTask • Lösung 4: Loader • Lösung 5: Services
![Page 57: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/57.jpg)
Inter-Thread-Kommunikation
Wie kommen asynchron geholte Daten in den UI-Thread? • Lösung 1: Activity.runOnUiThread • Lösung 2: Handler • Lösung 3: AsyncTask • Lösung 4: Loader • Lösung 5: BroadcastReceiver
![Page 58: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/58.jpg)
BroadcastReceiver
• Eigene Android-Komponente mit separatem Lebenszyklus
• Empfänger für systemweite Nachrichten • Low-Battery, Screen-Off, SMS-Received, ... • ohne eigene UI, à Status Bar Notifications • Aufruf via sendBroadcast(Intent)
![Page 59: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/59.jpg)
Code Diving ...
![Page 60: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/60.jpg)
LocalBroadcastManager
• Nicht Teil der Android API • Im Android Support Package • Für Kommunikation innerhalb der App • Verwendung
– LocalBroadcastManager.getInstance – registerReceiver – sendBroadcast
![Page 61: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/61.jpg)
LocalBroadcastManager
• Nicht Teil der Android API • Im Android Support Package • Für Kommunikation innerhalb der App • Verwendung
– LocalBroadcastManager.getInstance – registerReceiver – sendBroadcast
![Page 62: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/62.jpg)
Agenda
Performance
Asynchronität
Fazit
![Page 63: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/63.jpg)
Fazit Always take the right guy for the job! • BroadcastReceiver zur Entkopplung
– Mit LocalBroadcastManager für In-App • Service mit eigenem Lebenszyklus • Loader für kurze Hintergrundaufgaben • AsyncTask für Progress-Feedback • Handler zum Ausführen in anderem Thread
– runOnUiThread als Shortcut
![Page 64: "Application not responding" - Asynchronität in Android](https://reader033.fdocuments.us/reader033/viewer/2022052706/5588f70bd8b42a9e4e8b45c8/html5/thumbnails/64.jpg)
Vielen Dank für Ihre Zeit. Kontakt: open knowledge GmbH Bismarckstr. 13 26122 Oldenburg [email protected] @ArneLimburg @_openknowledge
Q&A