Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

[Curs Android] C10 - Threaduri & Servicii (IPW 2011)

1,566 views

Published on

These slides are part of the Android Development Course which I taught to 10 students, while participating in the IP Workshop Summer School 2011.
http://www.scoaladevara.info/2011/?page_id=39

Published in: Education
  • Be the first to comment

  • Be the first to like this

[Curs Android] C10 - Threaduri & Servicii (IPW 2011)

  1. 1. Android Threaduri, Servicii, AIDL Vlad PETRE vlad@vladpetre.com http://twitter.com/vladpetre88 http://facebook.com/vladpetre88 http://www.linkedin.com/in/vladpetre881 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  2. 2. Intai, cateva informatii preliminare2 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  3. 3. Ierarhia de memorii Creste marimea Creste viteza3 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  4. 4. Multitasking4 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  5. 5. Starile proceselor5 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  6. 6. Schimbarea de context • Schimbarea programului curent de pe procesor – Salvarea registrilor – Salvarea setarilor de memorie6 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  7. 7. Fire de executie (Threads) • Forma de impartire a programului – Mai multe cai de procesare – Partajarea memoriei intre acestea • Variabilele sunt comune • Tipuri de fire de executie – User – Kernel7 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  8. 8. Implementarea in Java • Prin extinderea clasei Thread – Si suprascrierea metodei run() • Prin implementarea interfetei Runnable – Si implmentarea metodei run()8 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  9. 9. Metoda 1: extinderea clasei Thread9 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  10. 10. Clasa Thread class FirExecutie extends Thread { // … constructori, functii, etc. public void run() { // setul de instructiuni ce trebuie sa fie // executat de firul de executie } }10 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  11. 11. Utilizarea clasei FirExecutie class FirExecutie extends Thread { // … constructori, functii, etc. public void run() { // setul de instructiuni ce trebuie sa fie // executat de firul de executie } } FirExecutie fe = new FirExecutie(…); fe.start(); <-nu apelam direct metoda run()!!!11 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  12. 12. Metoda 2: implementarea interfetei Runnable12 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  13. 13. Interfata Runnable class FirExecutie implements Runnable { // … constructori, functii, etc. public void run() { // codul firului de executie separat } }13 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  14. 14. Utilizarea clasei FirExecutie class FirExecutie implements Runnable { // … constructori, functii, etc. public void run() { // codul firului de executie separat } } Thread fir = new Thread(new FirExecutie()); fir.start(); <-nu apelam direct metoda run()!!!14 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  15. 15. Diferenta intre Runnable si Thread15 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  16. 16. Diferenta intre Runnable si Thread Runnable Thread •Interfata •Clasa •Obiectul poate extinde •Obiectul trebuie sa extinda orice alta clasa clasa Thread •Doar implmenteaza •Mai putin flexibil interfata Runnable •Cod mai simplu •Mai flexibil •Cod putin mai complicat16 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  17. 17. Oprirea unui fir de executie Doar cand se termina de executat setul de instructiuni din metoda run()17 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  18. 18. Revenim la Android18 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  19. 19. Procesarea în Activități • Procesarea in activitati are loc in: – Functiile activitatii • onCreate(…) • onStart(…) • … – Funcțiile observatorilor • onClick(…) • Procesare putina!!! – Trebuie sa evitam starea de Not Responding • Solutia – Fire de executie – Servicii – AsyncTask19 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  20. 20. Servicii • Componenta Android • Speciala pentru procesare • Ruleaza in fundal (background) • Prioritate mai mica • Mai stabil (in timp) • Un serviciu ruleaza in threadul principal (threadul in care ruleaza si activitatile) in cadrul procesului aplicatiei sale. Componenta Service NU isi creaza propriul sau thread daca noi nu explicitam acest lucru.20 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  21. 21. Evenimente 21 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  22. 22. Implementarea serviciilor • Extinde clasa Service – Serviciu simplu • void onCreate(); • int onStartCommand(Intent intent, int flags, int startId); • void onDestroy(); – Folosind AIDL • void onBind(Intent intent); • void onUnbind();22 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  23. 23. Servicii simple23 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  24. 24. Implementarea unui serviciu 1.Extinderea clasei Service – Implementarea metodelor – Crearea unor fire de execuție 2.Declararea componentei Service in Manifest 3.Pornirea/oprirea – startService(…) – stopService(…)24 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  25. 25. Exemplu • Afiseaza un numar prim pe secunda – Serviciul nu porneste automat – Serviciul nu se opreste automat25 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  26. 26. Numere Prime - Serviciu26 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  27. 27. Numere Prime–Thread efectiv 27 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  28. 28. Pornirea serviciului • Intent starter = new Intent(context, ClasaServiciu.class); • context.startService(starter);28 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  29. 29. Oprirea serviciului • Doua metode: – Intent intent = new Intent(context, ClasaServiciu.class); context.stopService(intent); – stopSelf();29 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  30. 30. Servicii cu AIDL30 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  31. 31. AIDL • Android Interface Definition Language – RPC pentru Android • Conexiune intre activitate si serviciu31 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  32. 32. Remote Procedure Call • RPC este un mod de comunicare intre diferite procese, ce permit ca un program sa apeleze subrutine ale altui program.32 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  33. 33. AIDL • Seamana cu Java • Declaratii identice • Tipuri de variabile limitate • Primare (int, long, float, double, char, boolean) – String – List* – Map* – Tipuri special construite * Trebuie sa contina doar tipuri pentru AIDL33 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  34. 34. Exemplu: IServiciuFilme.aidl package pdm.filme; interface IServiciuFilme { Int numarFilme(); String titluFilm(intnumar); String regizorFilm(intnumar); }34 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  35. 35. AIDL => clasa • IServiciuFilme.aidl – IServiciuFilme.Stub • Clasa abstracta cu functiile din Interfata35 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  36. 36. ListaFilme - Serviciu36 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  37. 37. ListaFilme – serviciul efectiv 37 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  38. 38. Conectare folosind AIDL38 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  39. 39. Conectare folosind AIDL39 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  40. 40. Bibliografie • http://pdm.ipworkshop.ro • http://download.oracle.com/javase/tutorial/essential/concurrency/ • http://developer.android.com/guide/topics/fundamentals/services.html • http://developer.android.com/guide/developing/tools/aidl.html • http://developer.android.com/reference/android/app/Service.html40 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
  41. 41. Întrebări?41 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

×