[Curs Android] C10 - Threaduri & Servicii (IPW 2011)
-
Upload
vlad-petre -
Category
Education
-
view
1.382 -
download
4
description
Transcript of [Curs Android] C10 - Threaduri & Servicii (IPW 2011)
1 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
AndroidThreaduri, Servicii, AIDL
Vlad PETRE
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?