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

Post on 27-Jan-2015

1,380 views 4 download

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

transcript

1 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

AndroidThreaduri, Servicii, AIDL

Vlad PETRE

vlad@vladpetre.com

http://twitter.com/vladpetre88

http://facebook.com/vladpetre88

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

2 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Intai, cateva informatii preliminare

3 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Ierarhia de memoriiCreste marimea

Creste viteza

4 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Multitasking

5 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Starile proceselor

6 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Schimbarea de context• Schimbarea programului curent de pe procesor

– Salvarea registrilor– Salvarea setarilor de memorie

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

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

9 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Metoda 1: extinderea clasei Thread

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

}

}

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

12 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Metoda 2: implementarea interfetei Runnable

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}

}

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

15 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Diferenta intre Runnable si Thread

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

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

18 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Revenim la Android

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

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.

21 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Even

imen

te

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

23 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Servicii simple

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

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

26 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Numere Prime - Serviciu

27 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Num

ere

Prim

e–Th

read

efe

ctiv

28 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Pornirea serviciului• Intent starter = new Intent(context,

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

29 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Oprirea serviciului• Doua metode:

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

– stopSelf();

30 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Servicii cu AIDL

31 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

AIDL• Android Interface Definition Language

– RPC pentru Android

• Conexiune intre activitate si serviciu

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.

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

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

}

35 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

AIDL => clasa• IServiciuFilme.aidl

– IServiciuFilme.Stub• Clasa abstracta cu functiile din Interfata

36 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

ListaFilme - Serviciu

37 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

List

aFilm

e –

serv

iciu

l efe

ctiv

38 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Conectare folosind AIDL

39 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Conectare folosind AIDL

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

41 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Întrebări?