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
6. Schimbarea de context
• Schimbarea programului curent de pe procesor
– Salvarea registrilor
– Salvarea setarilor de memorie
6 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
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
– Kernel
7 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
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. Metoda 1: extinderea clasei Thread
9 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
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. 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. Metoda 2: implementarea interfetei Runnable
12 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
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. 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
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 complicat
16 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
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
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
– AsyncTask
19 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
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. Evenimente
21 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
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
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. Exemplu
• Afiseaza un numar prim pe secunda
– Serviciul nu porneste automat
– Serviciul nu se opreste automat
25 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
26. Numere Prime - Serviciu
26 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
31. AIDL
• Android Interface Definition Language
– RPC pentru Android
• Conexiune intre activitate si serviciu
31 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
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. 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
33 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
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. AIDL => clasa
• IServiciuFilme.aidl
– IServiciuFilme.Stub
• Clasa abstracta cu functiile din Interfata
35 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea