Współbieżność w  Androidzie Zrównoleglanie zadań w Javie    na platformie Android                             Jacek Laskow...
O prelegencie - Jacek Laskowski •   Entuzjasta Java EE, OSGi, SCA oraz programowania funkcyjnego     (Clojure, F#, Scala) ...
Problem?   package pl.japila.android;   import   android.app.Activity;   import   android.os.Bundle;   import   android.vi...
30 sekund bezruchu   package pl.japila.android;   import   android.app.Activity;   import   android.os.Bundle;   import   ...
Application Not Responding (ANR) •   Wątek główny obsługujący     UI - “main" lub “thread UI” •   Android chroni przed    ...
Wątek główny UI• Wątek główny• Activity a wątek główny                            http://JacekLaskowski.pl
java.lang.{Thread | Runnable}• java.lang.Thread• java.lang.Runnable                                http://JacekLaskowski.pl
java.lang.concurrent• java.util.concurrent w Java 5• Callable• Executor• inne uproszczenia                                ...
Aktualizacja aktywnego ekranu •   Specjalizowane metody do aktualizacji danych w UI     •   Activity.runOnUiThread(Runnabl...
android.os.Handler• Asynchroniczne przetwarzanie zadań z  android.os.MessageQueue• Pojedynczy wątek• Związany z wątkiem tw...
android.os.HandlerThread• Utworzenie wątku z Looper• Fabryka Handler’ów• start() konieczny do uruchomienia                ...
android.os.Messenger• Referencja do Handler• Komunikacja między procesami                                 http://JacekLask...
android.os.AsyncTask• Zadanie wykonywane w tle• Wynik przekazywany do wątku UI• Klasa pomocnicza nad Thread i Handler• Kró...
Cykl AsyncTask• execute(Params...) w wątku UI• doInBackground(Params...)• onPostExecute(Result)• executeOnExecutor(Executo...
android.app.Service• Długotrwałe zadanie (ponad kilka sekund)• Brak interakcji z użytkownikiem• Komunikacja między aplikac...
android.app.IntentService• wzorzec obsługi kolejki zadań• Asynchroniczne przetwarzanie zadań• startService(Intent)• Pojedy...
android.content.ContentProvider• Współdzielenie danych między aplikacjami• Dostawca danych                                ...
Pytania?@jaceklaskowski http://blog.japila.pl
Upcoming SlideShare
Loading in …5
×

Współbieżność w Androidzie - Zrównoleglanie zadań w Javie na platformie Android

1,267 views

Published on

Prezentacja jest podsumowaniem dotychczasowych doświadczeń prelegenta w rozpoznaniu tematu zrównoleglania zadań na platformie Android. Zwykło się traktować programowanie wielowątkowe jako tzw. ”zło konieczne” i nawet w sytuacjach zastosowania omija się je szerokim łukiem ze względu na brak wiedzy i doświadczenia. Prezentacja ma w zamyśle uzupełnić braki i być swoistym katalizatorem dalszych studiów w temacie we własnym zakresie.

Więcej na http://2012.mobilization.pl/speakers/#JacekLaskowski

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,267
On SlideShare
0
From Embeds
0
Number of Embeds
26
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Współbieżność w Androidzie - Zrównoleglanie zadań w Javie na platformie Android

  1. 1. Współbieżność w Androidzie Zrównoleglanie zadań w Javie na platformie Android Jacek Laskowski jacek@japila.pl http://www.JacekLaskowski.pl wersja 1.0, 22.09.2012
  2. 2. O prelegencie - Jacek Laskowski • Entuzjasta Java EE, OSGi, SCA oraz programowania funkcyjnego (Clojure, F#, Scala) • Założyciel i lider Warszawa JUG • Organizator konferencji Javarsovia, Confitura, warsjawa • Członek zespołu NetBeans DreamTeam • Blogger na http://JacekLaskowski.pl • Blogger na http://blog.japila.pl • @jaceklaskowski na twitterze • Członek zespołów Apache Geronimo i Apache OpenEJB • IBMer w World-wide WebSphere Competitive Migration Team http://JacekLaskowski.pl
  3. 3. Problem? package pl.japila.android; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; public class ANRDemoActivity extends Activity implements OnClickListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); View button = findViewById(R.id.button1); button.setOnClickListener(this); } @Override public void onClick(View v) { try { Thread.sleep(30*1000); } catch (InterruptedException e) { e.printStackTrace(); } } } http://JacekLaskowski.pl
  4. 4. 30 sekund bezruchu package pl.japila.android; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; public class ANRDemoActivity extends Activity implements OnClickListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); View button = findViewById(R.id.button1); button.setOnClickListener(this); } @Override ! public void onClick(View v) { try { Thread.sleep(30*1000); } catch (InterruptedException e) { e.printStackTrace(); } } } http://JacekLaskowski.pl
  5. 5. Application Not Responding (ANR) • Wątek główny obsługujący UI - “main" lub “thread UI” • Android chroni przed niewłaściwie (nie)aktywnymi aplikacjami • Brak odpowiedzi po 5 sek. • Długotrwałe i/lub blokujące operacje I/O http://JacekLaskowski.pl
  6. 6. Wątek główny UI• Wątek główny• Activity a wątek główny http://JacekLaskowski.pl
  7. 7. java.lang.{Thread | Runnable}• java.lang.Thread• java.lang.Runnable http://JacekLaskowski.pl
  8. 8. java.lang.concurrent• java.util.concurrent w Java 5• Callable• Executor• inne uproszczenia http://JacekLaskowski.pl
  9. 9. Aktualizacja aktywnego ekranu • Specjalizowane metody do aktualizacji danych w UI • Activity.runOnUiThread(Runnable) • View.post(Runnable) • View.postDelayed(Runnable, long) @Override public void onClick(View v) { new Thread(new Runnable() { public void run() { final Bitmap bitmap = loadImageFromNetwork("http://example.com/image.png"); mImageView.post(new Runnable() { public void run() { mImageView.setImageBitmap(bitmap); } }); } }).start(); } http://JacekLaskowski.pl
  10. 10. android.os.Handler• Asynchroniczne przetwarzanie zadań z android.os.MessageQueue• Pojedynczy wątek• Związany z wątkiem tworzącym, np. wątek UI• Zadaniami są Message (zalecane) lub Runnable• Możliwe zadania opóźnione w czasie• post(Runnable)• sendMessage(Message) http://JacekLaskowski.pl
  11. 11. android.os.HandlerThread• Utworzenie wątku z Looper• Fabryka Handler’ów• start() konieczny do uruchomienia http://JacekLaskowski.pl
  12. 12. android.os.Messenger• Referencja do Handler• Komunikacja między procesami http://JacekLaskowski.pl
  13. 13. android.os.AsyncTask• Zadanie wykonywane w tle• Wynik przekazywany do wątku UI• Klasa pomocnicza nad Thread i Handler• Krótkie zadania (kilka sekund)• Pojedyncze wykonanie• Pojedynczy wątek wykonawczy http://JacekLaskowski.pl
  14. 14. Cykl AsyncTask• execute(Params...) w wątku UI• doInBackground(Params...)• onPostExecute(Result)• executeOnExecutor(Executor, Params...) http://JacekLaskowski.pl
  15. 15. android.app.Service• Długotrwałe zadanie (ponad kilka sekund)• Brak interakcji z użytkownikiem• Komunikacja między aplikacjami (procesami)• <service> w AndroidManifest.xml• Context.startService()• Context.bindService()• Działa w wątku UI http://JacekLaskowski.pl
  16. 16. android.app.IntentService• wzorzec obsługi kolejki zadań• Asynchroniczne przetwarzanie zadań• startService(Intent)• Pojedynczy wątek• Działa dopóty istnieją zadania• onHandleIntent(Intent) http://JacekLaskowski.pl
  17. 17. android.content.ContentProvider• Współdzielenie danych między aplikacjami• Dostawca danych http://JacekLaskowski.pl
  18. 18. Pytania?@jaceklaskowski http://blog.japila.pl

×