+ All Categories
Home > Education > [Curs Android] C10 - Threaduri & Servicii (IPW 2011)

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

Date post: 27-Jan-2015
Category:
Upload: vlad-petre
View: 1,380 times
Download: 4 times
Share this document with a friend
Description:
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
41
1 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea Android Threaduri, Servicii, AIDL Vlad PETRE vlad@vladpetre.com http://twitter.com/vladpetre88 http://facebook.com/vladpetre88 http://www.linkedin.com/in/ vladpetre88
Transcript
Page 1: [Curs Android] C10 - Threaduri & Servicii (IPW 2011)

1 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

AndroidThreaduri, Servicii, AIDL

Vlad PETRE

[email protected]

http://twitter.com/vladpetre88

http://facebook.com/vladpetre88

http://www.linkedin.com/in/vladpetre88

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

2 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Intai, cateva informatii preliminare

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

3 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Ierarhia de memoriiCreste marimea

Creste viteza

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

4 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Multitasking

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

5 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Starile proceselor

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

6 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Schimbarea de context• Schimbarea programului curent de pe procesor

– Salvarea registrilor– Salvarea setarilor de memorie

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

7 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

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– Kernel

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

8 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Implementarea in Java• Prin extinderea clasei Thread

– Si suprascrierea metodei run()

• Prin implementarea interfetei Runnable– Si implmentarea metodei run()

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

9 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Metoda 1: extinderea clasei Thread

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

10 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Clasa Thread

class FirExecutie extends Thread{

// … constructori, functii, etc.public void run(){

// setul de instructiuni ce trebuie sa fie// executat de firul de executie

}

}

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

11 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Utilizarea clasei FirExecutieclass 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()!!!

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

12 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Metoda 2: implementarea interfetei Runnable

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

13 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Interfata Runnable

class FirExecutie implements Runnable{

// … constructori, functii, etc.public void run(){

// codul firului de executie separat}

}

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

14 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Utilizarea clasei FirExecutieclass 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()!!!

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

15 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Diferenta intre Runnable si Thread

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

16 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Diferenta intre Runnable si Thread

Runnable•Interfata•Obiectul poate extinde orice alta clasa•Doar implmenteaza interfata Runnable•Mai flexibil•Cod putin mai complicat

Thread•Clasa•Obiectul trebuie sa extinda clasa Thread•Mai putin flexibil•Cod mai simplu

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

17 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Oprirea unui fir de executie

Doar cand se termina de executat setul de instructiuni din metoda run()

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

18 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Revenim la Android

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

19 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

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– AsyncTask

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

20 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

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.

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

21 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Even

imen

te

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

22 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

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();

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

23 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Servicii simple

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

24 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Implementarea unui serviciu

1.Extinderea clasei Service– Implementarea metodelor– Crearea unor fire de execuție

2.Declararea componentei Service in Manifest3.Pornirea/oprirea

– startService(…)– stopService(…)

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

25 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Exemplu• Afiseaza un numar prim pe secunda

– Serviciul nu porneste automat– Serviciul nu se opreste automat

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

26 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Numere Prime - Serviciu

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

27 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Num

ere

Prim

e–Th

read

efe

ctiv

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

28 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Pornirea serviciului• Intent starter = new Intent(context,

ClasaServiciu.class);• context.startService(starter);

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

29 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Oprirea serviciului• Doua metode:

– Intent intent = new Intent(context, ClasaServiciu.class);context.stopService(intent);

– stopSelf();

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

30 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Servicii cu AIDL

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

31 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

AIDL• Android Interface Definition Language

– RPC pentru Android

• Conexiune intre activitate si serviciu

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

32 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Remote Procedure Call

• RPC este un mod de comunicare intre diferite procese, ce permit ca un program sa apeleze subrutine ale altui program.

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

33 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

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 AIDL

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

34 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Exemplu: IServiciuFilme.aidl

package pdm.filme;

interface IServiciuFilme{

Int numarFilme();String titluFilm(intnumar);String regizorFilm(intnumar);

}

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

35 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

AIDL => clasa• IServiciuFilme.aidl

– IServiciuFilme.Stub• Clasa abstracta cu functiile din Interfata

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

36 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

ListaFilme - Serviciu

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

37 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

List

aFilm

e –

serv

iciu

l efe

ctiv

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

38 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Conectare folosind AIDL

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

39 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Conectare folosind AIDL

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

40 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

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.html

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

41 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Întrebări?


Recommended