Sunteți pe pagina 1din 19

1.

Notiunea de Activity
Activity este o componenta a aplicatiei care reprezinta o interfata
cu utilizatorul, fereastra sau formular;
o aplicatie Android poate avea una sau mai multe activitati; de exemplu o
aplicatie de tip Agenda poate avea o activitate pentru a gestiona contactele, o
activitate pentru a gestiona intlniri si una pentru a edita o intrare in agenda;
fiecare Activitate are propriul sau ciclu de viata, independent de ciclul de viata
al procesului asociat aplicatiei;
fiecare activitate are propria stare si datele acesteia pot fi salvate sau restaurate;
activitatile pot fi pornite de aplicatii diferite (daca este permis);
are un ciclu de viata complex deoarece aplicatiile pot avea activitati multiple si
doar una este in prim-plan; utiliznd managerul de activitati, sistemul Android
gestioneaza o stiva de activitati care se gasesc in diferite stari (pornire, in
executie, intrerupta, oprita, distrusa);
in SDK, Activitatea este implementata folosind o subclasa a clasei Activity
care extinde clasa Context;

2.Ciclu de viata a unei Activitati


Ciclul de viata a unei Activitati descre stare in care o activitate poate fi la un
moment dat

Running - Activitatea a fost creata (onCreate()), pornita (onStart()) si


este afisata pe ecranul aparatului; in cazul in care activitatea a mai fost
utilizata si aplicatia a salvat starea acesteia (onSaveInstanceState()),
activitatea este reluata din acel punct (onRestoreInstanceState() si
onResume()); in aceasta stare utilizatorul interactioneaza cu activitatea
prin intermediul interfetei dispozitivului (tastatura, touchscreen, display);
Paused - Activitatea pierde prim-planul (onPause()), deoarece o alta
activitate este executata, cum ar fi o fereastra de dialog; de asemenea, in
cazul in care aparatul intra in modul sleep, activitatea este oprita
temporar; activitatea isi poate relua executia (onResume()) si este plasata
inapoi in prim-plan;

Stopped - Activitatea nu este mai in uz si pentru ca este oprita


(onStop()) nu este vizibila; pentru a fi reactivata (ea deja exista),
activitatea trebuie sa fi repornita (onRestart() si onStart()) si reluata
(onResume());
Destroyed - Activitatea este distrusa (onDestroy()) si memoria sa
eliberat, deoarece nu mai este necesara sau sistemul are nevoie de
memorie suplimentara pentru rutinele proprii sau pentru alte activitati;

3.Ciclul de viata a unui procces


Toate componentele unei aplicaii vor rula ntr-un singur proces i, n
general, pentru majoritatea aplicaiilor nu este nevoie de procese
adiionale. Atunci cnd o aplicaie pornete i nu are deja
componente care ruleaz, Android va crea un proces UNIX nou
pentru acea aplicaie care va conine un singur fir de execuie
(thread). Toate componentele care vor porni ulterior vor rula n acel
thread, denumit i main thread sau UI thread. Vom discuta
despre el mai jos, n detaliu.
Procesele sunt ncadrate n 5 nivele de importan. Atunci cnd unele procese trebuie
omorte, cel cu nivelul mai mare de importan va fi distrus ultimul. Pe scurt, ele
sunt:
1. Foreground Process
Un proces necesar pentru ceea ce utilizatorul face la un moment dat, de exemplu un
activity care e folosit de utilizator sau un serviciu care e legat de activitatea cu care
utilizatorul interacioneaz.
2. Visible Process
Un proces care nu are componente vizibile pe ecran, dar este necesar pentru
componentele cu care interacioneaz utilizatorul, cum ar fi un proces cu un activity
care nu e n fa, dar are un dialog pornit n prim-plan.
3. Service Process
Un proces care conine un serviciu i nu e esenial pentru ceea ce este afiat
utilizatorului, cum ar fi un serviciu care red un MP3 n fundal n timp ce utilizatorul
folosete alte aplicaii.
4. Background Process

Un proces care conine o activitate care momentan nu e vizibil utilizatorului. Pentru


aceasta, exist o list LRU (least recently used) care este luat n considerare n
importana unui proces.
5. Empty Process
Un proces care nu are componente active i este pornit doar din motive de caching
sau pentru a mbunti timpul de start-up al unei aplicaii.

,
. , ,
, .

<activity>, <service>, <receiver> <provider>
android:process, ,
. ,
, ,
. android:process ,
,
Linux .
<application> android:process,
, .
Android ,
, .
, , .
, .
, Android
. , ,
, , ,
. , ,
. ,
.


Android ,
,
. , , ,
,
, .

,
. ., .
.
(
):
1.


, .
, :
o

Activity, (
Activity onResume()).

Service, ,
.

Service, " ", ,


startForeground().

Service,
(onCreate(), onStart() onDestroy()).

BroadcastReceiver, onReceive().

.
, ,
.
, ,
,
.
2.


, ,
. ,
:
o

Activity, ,
( onPause()). , ,
,
.

Service,
.

, ,
.
3.


, , startService(),
.

, ,
(,
), ,
.
4.


, , (
onStop() ).
, ,
, .
, LRU (
), , ,
, .
, ,
,
,
. .
.

5.


, .
,
.
.

Android
, . ,
, , .
, , ,
. , , ,
. , A
B A B,
A , B.
, , ,
, , ,
, ,
. , , -,
,
. ,
, ,
. ,
, .

4.Intent

Conceptul de intenie n Android este destul de complex (i unic), putnd fi definit ca o aciune
avnd asociat o serie de informaii, transmis sistemului de operare Android pentru a fi executat
sub forma unui mesaj asincron. n acest fel, intenia asigur interaciunea ntre toate aplicaiile
instalate pe dispozitivul mobil, chiar dac fiecare n parte are o existen autonom. Din aceast
perspectiv, sistemul de operare Android poate fi privit ca o colecie de componente funcionale,
independente i interconectate.
De regul, o intenie poate fi utilizat pentru:

a invoca activiti din cadrul aceleiai aplicaii Android;

a invoca alte activiti, existente n contextul altor aplicaii Android;

a transmite mesaje cu difuzare (eng. broadcast messages), care sunt propagate


la nivelul ntregului sistem de operare Android i pe care unele aplicaii Android
le pot prelucra, prin definirea unor clase asculttor specifice; un astfel de
comportament este util pentru a implementa aplicaii bazate pe evenimente.

Exist dou moduri prin care putem crea un Intent:

explicit prin atribuirea unui identificator sub forma unui String unic
o Intent intent = new Intent(com.example.myapp.myaction);

implicit prin specificarea instanei clasei care emite intenia i specificarea clasei de tipul
creia dorim s fie instana creat
o Intent intent = new Intent(SourceActivity.this, DestinationActivity.class);

Structura
component (activitate / serviciu)
definit n AndroidManifest.xml
eticheta <intent-filter> definete caracteristicile inteniei prin care
aceasta
poate fi invocat
action (android:name) MAIN, VIEW
category (android:name) LAUNCHER, DEFAULT
data Uri.parse()
android:host, andoid:port
android:mimeType - tel:, content://contacts/people, geo:, http://
android:path
android:scheme
type

component
extra: putExtras() / getExtras()
,
. ,
Intent
, :
Intent

:
Activity .
Activity Intent startActivity().
Intent , ,
.
,
startActivityForResult().
Intent onActivityResult() .
. .

:
Service ,

.
(, ), Intent startService().
Intent , ,
.
-,
, Intent bindService(). .
.

:
,
.
, , .

Intent sendBroadcast(), sendOrderedBroadcast() sendStickyBroadcast().

Intent
Intent:

Intent , ,
( ). Intent
, ,

. ,
, .

Intent .
, ,
. ,
, Intent ,
, .

Intent ,
, Intent.

1. Intent
: [1] Intent
startActivity(). [2] Android Intent,
Intent.
, [3] ( B),
onCreate() Intent.

Intent, Android
Intent Intent,
, . Intent
Intent, Intent.
Intent, ,
.
Intent ,
Intent, . , Intent
,
Intent. , - Intent
, Intent.

5. Intentii cu Difuzare

Intentii transmise catre toate componentele de la nivelul


dispozitiului mobil, pentru a notifica producerea unui eveniment
(HW/SW): apel telefonic, mesaj, nivel incarcare baterie, stare
conectivitate
- LocalBroadcastManager (la nivel local): apeluri sincrone
- Folosite nativ, la nivelul sistemului de operare

6.Android Manifest
Orice aplicatie Android trebuie sa includa un AndroidManifest.xml fisier in directoriul
aplicatiei. Fisierul AndroidManifest.xml contine o serie de informatii despre aplicatie
pe care le prezinta sistemului, inainte ca acesta sa poata rula aplicatia.
Iata cateva din informatiile pe care le contine:
denumeste pachetul Java corespunzator aplicatiei
descrie componentele aplicatiei activitati, servicii, broadcast receivers si
content providers; numeste clasele care implementeaza fiecare componenta si
capabilitatile lor (e.g. caror mesaje de tip Intent le pot raspunde).
declara permisiunile pe care aplicatia trebuie sa le aiba pentru a functiona,
pentru a interactiona cu portiuni protejate ale API
declara permisiunile pe care alte aplicatii trebuie sa le aiba atunci cand solicita
sa foloseasca componente ale aplicatiei curente
declara nivelul minim de Android API de care are nevoie aplicatia
enumera bibliotecile de care se linkeaza aplicatia.
Permisiunile sunt restrictii ce limiteaza accesul la o parte din cod sau la date de pe
dispozitiv. Fiecare permisiune este definita printr-un text unic, e.g.:
android.permission.READ_OWNER_DATA
android.permission.SET_WALLPAPER

7.Android Context
Contextul este interfata la informatia globala despre mediul
aplicatiei.Este o clasa abstracta a carei implementare este efectuata
de sistemul Android.Aceasta permite accesarea resurselor specific
aplicatiei si claselor, lansarea activitatilor , bradcasting si primirea
intent-urilor

Clasa Context
Clas abstract definit n pachetul
android.content
Asigur accesul la mediul aplicaiei
Acces la resurse
Lansarea de activiti noi
Acces la servicii de sistem
Acces la baze de date i fiiere
(Context) ,
Android.
, , ,
, . Context
, Application, Activity Service,
.
:
getBaseContext ( )
getApplicationContext ( )
getContext ( )
this ( , getContext)
MainActivity.this ( MainActivity)
getActivity ( )

8. Operatii asupra Serviciilor


Pornire: startSevice pe baza unei intentii
o Explicit
o Implicit
Oprire

o StopService de catre alta componenta pe baza unei


intentii
o StopSelf da catre el insusi
Dara parametri
Cu parametri

9. Structura unui Serviciu


Serviciu o componenta Android adecvata pentru implementarea
unor functionalitati complexe ce implica un volum de procesare
mare, de lunga durata, ce nu necesita instructiunea?????
(interactiunea) cu utilizatorul.
Clasa android.app.service
- On Create ()
- On Bind (Intent) asociaza serviciul la o alta componenta
Android
Definit in Android Manifest.Xml eticheta <service>
Android: name clasa care implementeaza serviciul
Android: permission restrictioneaza operatiile de pornire,
oprire la componentele care o detin
,
.
,
,
. ,
(IPC).
, ,
, -
, .
Service

, (, )
startService().
, , .

. , .
, .

,
bindService(). -,
, ,

(IPC).
. ,
, .
,
(
) .
: onStartCommand() , onBind()
.
(, )
( )
, Intent.

.
.

10. Runnable si Handlers


Interfata de tip Runnable: Una din cele mai folosite interfete din Java este
interfata Runnable. Este foarte importanta deoarece este implementata
de clasa Thread. Interfata Runnable asigura un protocol comun obiectelor
care doresc sa-si execute codul, atita timp cit sunt active. Un obiect este
activ daca a fost lansat in executie si nu a fost oprit. Inima unui obiect,
care implementeaza clasa Runnable, este metoda run(). Aceasta metoda
trebuie suprascrisa de obiectul de tip Runnable. De altfel, este singura
metoda a interfetei Runnable. Aceasta interfata este menita sa
implementeze un protocol comun pentru obiectele care doresc sa execute
codul atita timp cit sunt active , de exemplu Runnable este implementat
de Thread astfel fiind activa aceasta inseamna ca threadul a fost startat
si inca nu a fost stopat.In aditie Runnable asigura sensul pentru o clasa
de a fi activa atita timp cit nu este subclasa a thread-ului.Runnable se
utilizeaza atunci cind este planificat sa se faca override la metoda run si
nu la alte metode a clasei Thread.

Clasa Handler permite sa trimiti si sa procesezi obiecte de tip Message si


Runnable asociate cu threadul MessageQueue. Fiecare instanta de

Handler este asociata cu un singur fir de executie si acesta este firul de


executie a firul de asteptare a mesajelor.Cind creeam un nou Handler
acesta face salt la firul de executie si de la acel point Handler-u va trimitie
mesaje si runnables la acel fir de asteptare a mesajelor si le va executa
pe masura iesirii din stiva(message queue)
Exista doua utilizari majore a clase Handler:
-De programat Messages si Runnables sa fie executate la un moment
oarecare in viitor
- De agatat o actiune sa fie executata pe un alt fir de executie
Cind un proces este creat pentru aplicatie, main thread-ul este dedicat sa
execute firul de asteptare a mesajelor care au grija de intretinerea
obiectelor de top aplicatiei cum ar fi, Activity, BroadCast Receivers, si alte
ferestre care ei creaza.Putem crea propriile fire de executie si sa
comunicam inapoi cu main thread-ul cu ajutorul clasei Handler. Aceasta
are loc datorita chemarii aceluiasi post sau cu ajutorul metodei
sendMessage dar deja de pe firul nou creat.

11. Clase Abstracte si Interfete


Daca dorim sa stabilim interfata comuna pentru a putea crea
functionalitati diferite pentru fiecare subtip si pentru a sti ce anume
au clasele derivate in comun, se foloseste clasa abstracta.
Cream o clasa abstracta cind:
- Manipulam un set de clase prin interfata comuna
- Reutilizam o serie de metode in clasele derivate
Interfetele fac un pas mai departe de conceptul abstract. Se poate
considera ca o interfata este o clasa abstracta pura, ce permite
programatorului sa stabileasca o forma pentru o clasa, dar fara
nicio implementare.
Interfata este folosita pentru a descrie un protocol intre clase

12.Metode Asincrone(async/await)
Metoda care va fi rulata asincron trebuie sa intoarca void, Task, sau
Task<T>. Metoda apelanta care foloseste in interiorul ei apelul await
trebuie marcata ca async. Compilatorul ar putea deduce automat acest
pattern fara sa oblige programatorul sa marcheze metodele cu async.
Await foloseste SynchronizationContext pentru a continua pe acelasi
thread pe care metoda async a pornit
. Rularea seriala datorata await este valabila doar in contextul metodei
care contine apelul.
Nu doar pentru obiecte de tipul Task se poate apela await. Se poate
apela await pentru orice tip care detine o metoda cu numele GetAwaiter.
Nu exista o interfata ce trebuie implentata, doar o metoda GetAwaiter ce
intoarce un tip cu urmatoarea semnatura de metode: IsCompleted,
OnCompleted(Action), GetResult(). Vestea buna este ca aceste metode
pot fi metode de extensie. Putem extinde astfel orice tip ( in masura in
care are sens) pentru a suporta pattern-ul await.

13.Task and Threads


Conceptul de thread (fir de execuie) definete cea mai mic unitate de
procesare ce poate fi programat spre execuie de ctre sistemul de operare.

Este folosit n programare pentru a eficientiza execu ia programelor,


executnd poriuni distincte de cod n paralel n interiorul aceluiai proces.
Cteodata ns, aceste portiuni de cod care constituie corpul threadurilor, nu
sunt complet independente i n anumite momente ale execu iei, se poate
ntampla ca un thread s trebuiasc s atepte execu ia unor instructiuni din
alt thread, pentru a putea continua execu ia propriilor instruc iuni. Aceast
tehnic prin care un thread asteapt execu ia altor threaduri nainte de a
continua propria execuie, se numete sincronizarea threadurilor.
Task, Task<T> Reprezinta o abstractizare la un nivel mai inalt decat acela
de Thread. Un task poate fi sau nu rulat pe un thread dedicat. Task-urile
pot fi inlantuite folosind continuations, iar executia acestui lant de task-uri
poate fi conditionata in functie de terminarea cu success sau nu a task-ului
precedent.

14.Protocolul HTTP
- Protocolul HTTP
Este un protocol la nivel aplicatie destinat sistemelor de informare distribuite,
"colaborative", de genul hypermedia. Aparut ca protocol de baza pentru WWW
nca din 1990, a cunoscut o serie de transformari, o versiune "finala" neexistnd
nici n prezent.
Numele este acronimul pentru HyperText Transfer Protocol, desi la origine
"hypertext" a fost definitoriu, practica curenta l-a dus destul de repede nspre
"hypermedia" - documentele vehiculate cuprinznd nu numai text, ci si sunet,
imagine sau informatii structurate.
Aplicatiile care folosesc protocolul - cei doi parteneri n discutie, cele doua
capete ale unei conexiuni - snt entitati abstracte din punct de vedere al
protocolului. Ele trebuie "doar" sa poata comunica ntre ele ceea ce nseamna,
n principiu, posibilitatea de a primi sau formula cereri si de a formula sau
receptiona raspunsuri.
Cererile formulate n protocolul HTTP se refera la informatii care se pot afla
stocate n diverse baze de date, n diverse formate, pe diverse calculatoare.
Cum anume se traduc n cereri "concrete" date diferite, este o problema care
depaseste protocolul: sarcina lui este doar sa fixeze regulile care trebuie
respectate de cele doua aplicatii participante la un moment dat n comunicare
pentru ca sa se poata ntelege fara nici un fel de risc de interpretare eronata a
unei cereri sau a unui raspuns.

- Metodele i cmpurile prot. HTTP


1. GET: este cea mai folosit metod, fiind utilizat atunci cnd serverului i se cere o
resurs.
2. HEAD: se comport exact ca metoda GET, dar serverul returneaz doar antetul
resursei, ceea ce permite clientului s inspecteze antetul resursei, fr a fi nevoit s
obin i corpul resursei.
3. PUT: metoda este folosit pentru a depune documente pe server, fiind inversul
metodei GET.
4. POST: a fost proiectat pentru a trimite date de intrare ctre server.
5. DELETE: este opusul metodei PUT.
6. TRACE: este o metod folosit de obicei pentru diagnosticare, putnd da mai multe
informaii despre traseul urmat de legtura HTTP, fiecare server proxy adugndui semntura n antetul Via.
7. OPTIONS: este folosit pentru identificarea capacitilor serverului Web, nainte de
a face o cerere.
8. CONNECT: este o metod folosit n general de serverele intermediare.
9.

15.XML/JSON
(serializare/desearializare)
- XML/Json (metode de serializare/deserializare)
-

XML foloseste un format de organizare a datelor de tip arborescent si este un format


standardizat, bazat pe text, pentru stocarea unor informatii ce pot fi citite usor de
aplicatii.
XML poate fi folosit pentru stocarea oricarui tip de date inclusiv documente, imagini,
filme, muzica, etc.

Cand folosim serializare XML?


-

In consecinta serializare XML are urmatoarele avantaje:


Interoperatibilitate mai mare
Fisierele pot fi editate usor cu editoare normale text
Versionare mai usoara

Json este un acronim n limba englez pentru JavaScript Object Notation, i este un format
de reprezentare i interschimb de date ntre aplica ii informatice. Este un format text,
inteligibil pentru oameni, utilizat pentru reprezentarea obiectelor i a altor structuri de date
i este folosit n special pentru a transmite date structurate prin re ea, procesul purtnd
numele de serializare. JSON este alternativa mai simpl, mai facil dect limbajul XML.
Elegana formatului JSON provine din faptul c este un subset al limbajului JavaScript ,
fiind utilizat alturi de acest limbaj. Tipul de media pe care trebuie s l transmit un
document JSON este application/json. Extensia fiierelor JSON este .json.

16.RegEx
O expresie regulat, pe scurt denumit i RegEx sau RegExp, este
un ir de caractere care descrie un model de cutare n alt ir de
caractere sau, de ce nu, ntr-un fiier ntreg. Cu ajutorul expresiilor
regulate poi gsi sau nlocui anumite pri dintr-un text. Sunt o
metod puternic de verificare pentru validitatea adreselor de email, domenii de internet sau coduri potale. Deasemenea cu
ajutorul expresiilor regulate putem s analizm fiiere tot mai mari
de text n cutarea informaiilor dorite. Definiie
O expresie regulat care se mai numete i pattern, este o expresie
care descrie un ir de caractere. Acest ir de caractere se
interpreteaz i identific anumite iruri de caractere. Practic irul
de caractere din ablonul expresiei regulate este schema general
sau formula.

17.HTML Parsing/xPath
Parsarea html se realizeaza cu 2 scopuri
- Ofera o interfata pentru programatori pentru a accesa cu
usurinta si modifica codul html
- de a imbunatati codul html ca exemplu parserul html Tidy
XPath (XML Path Language) este un limbaj de expresii utilizat pentru a
selecta poriuni dintr-un document XML sau pentru a calcula valori (iruri de
caractere, numere, sau valori buleene) pe baza con inutului unui document
XML
Limbajul XPath este structurat pe reprezentarea sub form de arbore a
documentului XML, oferind posibilitatea de a naviga n acest arbore, prin
selecia nodurilor XML care satisfac diferite criterii. n utilizarea frecvent (care

nu este o specificaie oficial), o expresie XPath este deseori numit un


XPath.
Motivaia apariiei acestui limbaj a fost dorina de a folosi aceea i sintax i
acelai model att pentru XPointer ca i pentruXSLT, XPath s-a ncetenit
printre programatori ca fiind un mic limbaj de interogare, iar anumite pr i ale
sale sunt folosite n specificaiile W3C pentru XML Schema i XForms.

AsynTask
Exista mai multe otpiuni pentru a folosi threaduri secundare si a
decongestiona main thread-ul.O metoda este mecanismul
asynchronous task.Aceasta este reprezentat de clasa AsynTask si
este un wrapper parametrizat care ofera o serie de metode specific
pentru a usura interactiunea dintre threadul secundar si main
Clasa AsynTask este definite de 3 tipuri generic
-Params tipul parametrilor de intrare
-Progress tipul indicatorilor de progress
-Result tipul returnat
Putem folosi void daca nu avem nevoie din unul din acesti
parametric
Metodele Asincrone
-onPreExecute inainte ca sa inceapa task-ul
-doInBackground executa task-ul propriuzis
-onProgressUpdate - progresul/logurile
-onPostExecute este invocate pe main cand task-ul din fundal
este terminat
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalsize = 0;
for (int i = 0; i < count; i++) {

totalsize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i / (float) count) * 100));
// Escape early if cancel() is called
if (isCancelled()) break;
}
return totalize;
}
}

protected void onProgressUpdate(Integer... progress) {


setProgressPercent(progress[0]);
protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}

Apelare
new DownloadFilesTask().execute(url1, url2, url3);