Sunteți pe pagina 1din 39

Coninut

1. Activity .................................................................................................................................................. 2

2. Ciclul de via/ Activity Lifecycle ........................................................................................................ 3

3. Process Lifecycle................................................................................................................................... 4

4. Structura intent-ului............................................................................................................................... 7

5. Intent Resolution (Explicit Intent / Implicit Intent) .............................................................................. 9

6. Android Manifest ................................................................................................................................ 10

7. Noiunea de Context ............................................................................................................................ 12

8. Noiunea de View(Interfa)(Layout).................................................................................................. 12

9. XAML (mod de utilizare / componente) ............................................................................................. 14

10. UI Obj Events .................................................................................................................................. 16

11. Layout i Evenimente ...................................................................................................................... 17

12. Metode Asynchrone (async/await) .................................................................................................. 19

13. Task and Threads ............................................................................................................................. 20

14. Protocolul HTTP.............................................................................................................................. 22

15. Metodele i cmpurile prot. HTTP................................................................................................... 23

16. XML/Json (metode de serializare/deserializare) ............................................................................. 25

17. generale i moduri de utilizare RegEx ............................................................................................. 26

18. HTML Parsing/xPath() .................................................................................................................... 27

19. XML Parsing ................................................................................................................................... 29

20. Elementele UI la Android si WP ..................................................................................................... 33

1
Android

1. Activity
n Android, o activitate reprezint o fereastr care conine interfaa grafic a aplicaiei. O aplicaie poate
conine 0 sau mai multe activiti (tipic, exist mcar o activitate), scopul acestora fiind acela de a interaciona
cu utilizatorul. De obicei, o activitate implic un nivel de procesare redus astfel nct s se asigure operarea
aplicaiei n timp real. n cazul n care aplicaia conine mai multe activiti, navigarea ntre acestea se realizeaz
prin intermediul unor intenii (eng. intents), reinndu-se pe stiv ferestrele anterioare, care se gsesc n fundal.
O singur fereastr poate interaciona cu utilizatorul la un moment dat. Activitatea care se afieaz la momentul
n care se lanseaz aplicaia desemneaz ferastra principal, toate celelalte fiind accesate prin intermediul
acesteia. O activitate este reprezentat prin intermediul unei clase care extinde Activity. Toate activitile din
cadrul unei aplicaii Android trebuie s fie declarate n fiierul AndroidManifest.xml.

Se observ c pentru fiecare activitate trebuie s se precizeze clasa corespunztoare (derivat din
Activity), distincia dintre fereastra principal i celelalte ferestre fiind realizat prin intermediul valorilor pe
care le iau elementele action i category din <intent-filter>. Pentru activitatea principal, aciunea va fi
android.intent.action.MAIN, iar categoria android.intent.category.LAUNCHER (n sensul c aceast ferastr
va fi afiat n momentul n care se acceseaz pictograma aplicaiei din meniul telefonului), n timp ce pentru
celelalte activiti se vor specifica valorile android.intent.action.VIEW, respectiv
android.intent.category.DEFAULT.

Scopul unei activiti este de a interaciona cu utilizatorul. Din momentul n care activitatea apare pe ecran
i pn la momentul n care dispare, ea trece printr-o serie de etape, cunoscute sub denumirea de ciclul de via
al activitii.

Un activity apeleaz view-uri. View-urile sunt create in fisiere de tip xml, in care se pastreaza parametrii
layout-ului care se va afisa pe ecranul unui dispozitiv mobil. Sublasele unui View sunt Butoane, ListVew,
ImageView,RelativeLayout,LinearLayout etc. Activity poate fi de 7 tipuri, ele toate invoca o actiune specifica.

Evenimentele activitatilor:

- TextView -> onClickListener, onTextCnahgedListener


- Button -> onClickListener
- ListView -> onItemClickListener
- editText -> onTextChangeListemer

2
2. Ciclul de via/ Activity Lifecycle
Din momentul n care activitatea apare pe ecran i pn la momentul n care dispare, ea trece printr-o serie
de etape, cunoscute sub denumirea de ciclul de via al activitii. Clasa Activity definete o serie de
evenimente care guverneaz ciclul de via al unei activiti, pentru fiecare dintre acestea fiind apelate metodele
corespunztoare:

onCreate() - apelat n momentul n care activitatea este creat; aceast metod va fi folosit pentru a
crea i pentru a instania obiectele care vor fi utilizate n cadrul aplicaiei.
onStart() - apelat n momentul n care activitatea apare pe ecran

onResume() - apelat n momentul n care activitatea ncepe s interacioneze cu utilizatorul; aceast


metod va fi folosit pentru a porni servicii sau cod care trebuie s ruleze atta timp ct aplicaia este
afiat pe ecran.
onPause() - apelat n momentul n care activitatea este suspendat temporar, iar activitatea precedent
este reluat; aceast metod va fi utilizat pentru a opri servicii sau cod care nu trebuie s ruleze atta
timp ct aplicaia nu este afiat pe ecran.
onStop() - apelat n momentul n care activitatea dispare de pe ecran
onDestroy() - apelat nainte ca activitatea s fie distrus de ctre sistem (fie manual, fie automat) din
lips de memorie; aceast metod va fi utilizat pentru a elibera resurse nainte ca activitatea s fie
distrus.
onRestart() - apelat atunci cnd activitatea a fost oprit i ulterior repornit

3
3. Process Lifecycle
Procesele

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.

Android are autoritate asupra proceselor care ruleaz i poate decide la un anumit moment s nchid un anumit proces care
poate fi chiar cel al aplicaiei noastre. Motivele pot varia, dar principala cauz are legtur cu memoria care poate deveni
insuficient i este necesar eliberarea ei. n decizia de a opri un proces, Android ia n considerare mai multe aspecte, de
exemplu, dac are sau nu componente vizibile pe ecran.

4
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 activitycare 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.

Fire de execuie

Main Thread

Un proces poate avea mai multe fire de execuie. Dup cum am amintit mai sus, atunci cnd o aplicaie e pornit, un proces
UNIX este creat, iar n cadrul lui un singur thread. Acesta poart denumirea de main thread. El este extrem de important,
pentru c este responsabil de interaciunea cu utilizatorul, ca de exemplu lansarea de evenimente spre diferite componente de
UI (inclusiv partea de desenare) i este i firul n care aplicaia interacioneaz cu componentele de UI.

Sistemul nu va crea thread-uri diferite pentru fiecare component. Ce nseamn asta? Atunci cnd atingem un buton, acest
thread va lansa un eveniment de touch spre componenta respectiv care va lansa metoda responsabil de schimbare a strii.

Fiind singurul thread responsabil de partea de UI, dac aceasta este prea ncrcat, poate avea o performan slab. Tot din
acelai motiv, acest thread trebuie inut ct mai liber. Fiecare aciune pe acest thread, mai ales cele de durat, l vor bloca i,
implicit, aplicaia nu va rspunde la aciunile utilizatorului. Un exemplu n acest sens ar fi accesul la resurse de pe internet, cum
ar fi ncrcarea unei poze. Dac am lsa ca ncrcarea ei s fie fcut n acest thread, el ar fi blocat pn s-ar finaliza procesul
de ncrcare a pozei. Dac poza este mare i conexiunea slab, acest lucru poate dura cteva zeci de secunde. A ine interfaa
blocat pentru un timp att de lung nu este acceptabil.

De aceea, exist dou reguli de baz care nu sunt negociabile atunci cnd lucrm cu componentele de UI i main thread-ul:

5
Nu bloca niciodat thread-ul de UI

Pentru download-uri, query-uri n baze de date sau orice fel de operaiuni care nu afecteaz direct interfaa cu utilizatorul
i care ar putea fi de durat, trebuie folosite alte thread-uri.

Nu accesa direct partea de UI din alte thread-uri

Orice manipulare a interfeei de utilizator trebuie fcut din main thread, nu din thread-urile secundare.

Asynchronous Task
Exist multe opiuni pentru a folosi thread-uri secundare i a decongestiona main thread-ul: thread-uri clasice, servicii,
mecanismul de broadcast & receive. Una dintre aceste opiuni este i mecanismul de asynchronous task. Acesta este reprezentat
de clasa AsyncTask i nu este nimic altceva dect un wrapper puternic parametrizat care ofer o serie de metode specifice pentru
a uura interaciunea dintre thread-ul secundar i main thread. n ali termeni, clasa AsyncTask este construit ca i o clas
ajuttoare n jurul claselor Thread i Handler. Clasa e definit de un task care ruleaz pe un fir secundar n fundal i care public
automat rezultatul spre main thread.

Pentru a crea un AsyncTask, trebuie s extindem clasa de baz AsyncTask care este definit de 3 tipuri generice, denumite
Params, Progress i Result i de 4 metode, dintre care una este obligatorie. Iat tipurile generice:

1. Params Tipul parametrilor de intrare

Dac task-ul nostru are nevoie de parametri, aici trebuie specificat tipul lor. De exemplu, dac task-ul ar trebui s descarce
o serie de fiiere, atunci tipul parametrilor ar putea fi URL sau String.

2. Progress Tipul indicatorilor de progres

Dac task-ul e de durat, este bine s informm utilizatorul despre progresul fcut. n general, vom comunica o
valoare integer sau double, care specific ct din task a fost efectuat, dar putem folosi orice fel de obiect dac dorim s trimitem
informaii complete. n cazul exemplului de mai sus, putem trimite ori o valoare care s reprezinte ct la sut din toate fiierele
de download a fost deja descrcat sau putem returna un obiect care s conin i numele fiierelor deja descrcate sau progresul
individual pentru fiecare fiier n parte.

3. Result Tipul rezultatului returnat

Acesta este tipul obiectului care rezult n urma procesrii.

Dac task-ul nostru nu folosete parametri de intrare, nu dorete s publice progresul efectuat sau pur i simplu nu va returna
nimic n urma procesrii, putem folosi tipul Void.

Cele 4 metode pe care le ofer AsyncTask sunt fiecare dedicate unui pas din cadrul execuiei unui task. Acestea sunt:

1. onPreExecute

Acest pas este executat nainte ca task-ul propriu-zis s nceap execuia i este invocat n main thread. De obicei, l putem
folosi pentru a pregti execuia (ex: s afim un indicator de progres pe ecran).

6
2. doInBackground

Aceast metod e invocat pe thread-ul de fundal imediat dup onPreExecute i este metoda care execut task-ul propriu-
zis. Parametrii de intrare sunt trimii acestei metode i ea va returna un obiect de tipul specificat pentru rezultat. n acest
metod, putem folosi i metodapublishProgress(Progress), pentru a face public progresul fcut de task.

3. onProgressUpdate

Acest metod este invocat atunci cnd facem public un progres prinpublishProgress(Progress) i o putem folosi pentru
a actualiza un progress bar sau pentru a scrie n log-uri. Ea se va executa n paralel cu task-ul din fundal.

4. onPostExecute

Acest metod este invocat pe main thread imediat ce task-ul de fundal este terminat i primete ca parametru obiectul
returnat dedoInBackground.

4. Structura intent-ului
Intent- mecanism de descriere a unei operaiuni (ex. alege fotografie, trimite scrisoare, efectuare apel,
deschide browser). Multe operaiuni n Android lucreaz prin intent.
Cele mai rspndite scenariile de utilizare a intent-urilor pentru a porni o alt activitate n aplicaia proprie.
Dar acesta nu este singura variant pentru utilizarea intente-urilor. Ele pot fi utilizate pentru a anuna pornirea
unui serviciu sau activiti, care sunt direcionate spre execuia unor aciuni sau transmiterea unor notificri,
care atest realizarea unui eveniment sau aciune.
Intent-urile pot fi folosite pentru translarea mesajelor prin sistem. Fiecare aplicaie poate sa nregistreze un
receptor de difuzare care urmrete intente-urile i posibilitatea de a reaciona la ele. Aceasta permite crearea
aplicaiilor ca folosete modelul de evenimente, la baza cruia st evenimentele interne de sistem sau
evenimente externe, care pot fi transmise prin programe externe.
Android poate transmite intent-ruri pentru a anuna despre evenimentele de sistem, de exemplu despre
modificrile n starea conexiunii de reea sau in nivelul de ncrcare a bateriei. Aplicaiile de sistem n Android,
aa aplicaii ca efectuarea apelurilor sau controlul SMS, nregistreaz componentele, care urmresc intente-urile
declarate, de exemplu ai primit un mesaj SMS, i sistemul reacioneaz corespunztor la acest eveniment.
Exemplu de cod pentru a trece de la o activitate la alta:

Intent intent = new Intent(HelloWorld.this, AboutActivity.class); startActivity(intent);


n intent se indic numele clasei (activitate) ca al 2 parametru. Aceast clas trebuie specificat n manifest,
i sistemul parcurgnd acest manifest ca porni activitatea corespunztoare. O aplicaie poate avea mai multe
activiti, acestea pot fi apelate, tiind numele clasei. La trecerea dintr-o activitate n alta se poate specifica i
ce date ar putea fi transmise pentru prelucrarea lor n activitatea apelat. Pentru a efectua aceast operaiune se
utilizeaz metoda put().
Exemplu de transfer a listei de fisiere dintr-o activitate in alta:

7
//
ArrayList<File> fileList = new ArrayList<File>();
Intent intent = new Intent(MainActivity.this, SecondActivity.class); intent.putExtra("FILES_LIST", fileList);
startActivity(intent);
//
ArrayList<File> filelist = (ArrayList<File>)getIntent().getSerializableExtra("FILES_LIST");

Odat cu lucrul cu activiti, cu date returnate, nu este posibil utilizarea metodei startActivit() deoarece
aceasta returneaz rezultat. Dac este necesar returnarea datelor se utilizeaz metoda stratActivityForResult(),
care este adaptat pentru lucrul cu apelurile.

Intenii nedefinite
Exist la fel un tip de apelare a activitii care la crearea unui intent nu se utilizeaz numele clasei, dar se
indic parametrii action, data category, cu anumite valori. Sistemul analizeaz aceti parametri i alege varianta
corespunztoare pentru a porni activitatea. De exemplu, dac este indicat n parametri o adres a paginii web,
atunci se presupune deschiderea browser-ului. Combinaia dintre valori i parametri definete scopul care vrem
s-l atingem. Acestea pot fi accesarea unui link, trimiterea unei scrisori, apelarea unui numr telefonic etc.

n filtrele intent-ului se pot utiliza parametrii action, data, category. Aceste tipuri de intent este un mecanism
care permite s trimii cerere la componentele aplicaiei cu ajutorul activitilor. La apelarea metodei
stratActivity(), cren un astfel de tip de intent, trebuie de specificat activitatea, care trebuie s se realizeze i la
dorin o directorie URI la aceste date care trebuie prelucrate. La fel este posibil transferul de date adiionale
n alt activitate, utiliznd intent-ul extras. n acest caz pentru pornirea unei activiti sistemul singur va gsi
clasa componentului necesar, care mai bine corespunde activitii definite, lund n vedere tipul de date.

Exemplu de creare a unui intent cu activitatea predefinit ACTION_VIEW pentru a porni browser-ul i de
a accesa adresa necesar:

Uri address = Uri.parse("http://developer.alexanderklimov.ru"); Intent openlink = new Intent(Intent.ACTION_VIEW, address);


startActivity(openlink);

ACTION_VIEW permite vizualizarea unei pagini web, n cazul dat. Odat cu declararea adresei (datele
necesare), se efectueaz pornirea unei noi activiti (browser-ul). n acest timp activitatea iniial lucreaz ca
activitate de fundal. n fiecare caz Android singur gsete activitatea necesar pentru a rspunde la intent, i o
iniializeaz n caz de necesitate. Aplicaia la fel poate crea intent-uri proprii pentru a permite altor aplicaii s
le apeleze. Sistemul nu garanteaz prelucrarea intente-urilor.

Intent-ul conine informaii care prezint interes pentru Android, numele componentei care trebuie s-l
prelucreze intent-ul i setul de parametri pentru pornirea acestui component. Intent-ul conine urmtoarele
cmpuri: ComponentName, activitatea, date (uri, mime), categoria, etc.

8
Pentru a accesa informaii din intent se utilizeaz metoda getIntent(). Dac intent-ul este nedefinit (ascuns)
atunci poi obine informaii despre URL din intent la apelarea metodelor getAction(), getData(), getExtras().

5. Intent Resolution (Explicit Intent / Implicit Intent)


Sunt dou tipuri de intenii(Intent):

Explicit intents care specific componenta(blocuri eseniale de creare a aplicaiilor Android, ele
sunt punctele prin care sistemul poate accesa aplicaia noastr, nu toate componentele sunt defapt
puncte de intrare pentru user i unele depind unele de altele, dar fiecare exist ca o entitate anume i
joac un rol specific i fiecare este un bloc de creare unic care ajut la definirea comportamentului
general al aplicaiei. Sunt 4 tipuri de componente: Activity, Services, Content providers, broadcast
recievers) care ncepe cu un nume( numele clasei complet). Vom utiliza explicit intent pentru a porni
componenta n aplicaia noastr, deoarece noi cunoatem deja numele activitii sau serviciului ce o
dorim s pornim. De exemplu: pornirea unei noi activiti ca rspuns la aciunele unui user, sau
pornirea unui serviciu pentru descrcarea unui fiier n background.
Implicit Intents nu denumesc o component specific dar n schimb declar o aciune general ce
trebuie de realizat care permite unei alte componente din alt aplicaie s se ocupe de ea. De
exemplu: dac se dorete afiarea unei locaii pe hart al unui utilizator, putem s utilizm un intent
implicit de a face apel la alt aplicaie capabil s specifice locaia pe hart.

Cnd crem un intent explicit pentru a porni o activitate sau servicu, sistemul imediat va porni componenta
specificat n obiectul Intent.

Figura 1 : Are loc ilustrarea unui intent implicit i anume parcurgerea lui prin sistem pentru a porni o alt
activitate: [1] activitatea A creaz un Intent cu aciunea i o trasmite la startActivity(). [2] sistemul android caut
toate aplicaiile care corespund intentului, atunci cnd aplicaia necesar a fost gsit [3] sistemul starteaz
activitate potrivit (Activity B) invocnd metoda onCreate() i transmite intent n ea.

Intent Resolution
9
Cnd sistemul recepioneaz intentul implicit pentru pornirea activitii, el caut cea mai bun activitate pentru
inent, comparnd intentul cu 3 aspecte de baz utiliznd Intent filtrul:

Aciunea intentului
Datele intentului (ambele URI (Uniform Resource Identifier(Indentificatorul universal al
resurselor)) i tipuri de date)
Categoria intentului

Seciunele urmtoare vor descrie cum intenturile se potrivesc la cea mai apropiat compoonent cum filtrul
intentului este declarat n fiierul Manifest al aplicaiei.

Exemplele ce urmeaz, vor gsi intentul potrivit utiliznd intent filtrele:

Action test

<intent-filter>
<action android:name="android.intent.action.EDIT" />
<action android:name="android.intent.action.VIEW" />
...
</intent-filter>

Category test

<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
...
</intent-filter>

Data test
<intent-filter>
<data android:mimeType="video/mpeg" android:scheme="http" ... />
<data android:mimeType="audio/mpeg" android:scheme="http" ... />
...
</intent-filter>
Exemplu de intent pentru a obine datele imaginii dintr-un content provider i s le afieze:
<intent-filter>
<data android:mimeType="image/*" />
...
</intent-filter>

Exemplu de intent pentru a obine datele unui video de pe web:


<intent-filter>
<data android:scheme="http" android:type="video/*" />
...
</intent-filter>

6. Android Manifest
Fiierul Manifest AndroidManifest.xml reprezint n format xml informaia de baz despre aplicaie.
Fiecare aplicaie trebuie s aib acest fiier. Redactarea fiierului se poate efectua manual, schimbnd codul
10
XML sau schimbrile pot fi efectuate prin intermediul Manifest Editor, care permite s se realizeze redactarea
vizual i textual a fiierului n cadrul aplicaiei.

Particularitile manifestului:
- Declararea numelui pachetului java, care reprezint un identificator unic;
- Descrierea componentelor aplicaiei- activiti, servicii, intent, care permit s fie apelate clase, care
realizeaz fiecare component, i declar inteniile lor;
- Conine lista permisiunilor necesare pentru apelarea interaciunilor cu alte aplicaii;
- Declar permisiunile, care alte aplicaii trebuie s le aib pentru interaciunea cu componentele acestei
aplicaii;
- Declar nivelul minim API Android, necesar pentru lucrul cu aplicaia;
- Enumer biblioteci de legtur.

Structura manifestului:
Fiierul manifestului ncapsuleaz toat arhitectura aplicaiei Android, funcionalitile i configuraia
acesteia. Elementele rdcin ale manifestului reprezint <manifest>. Alte tag-uri importante i obligatorii
sunt <application> i <uses-sdk>. Elementul <application> reprezint elementul de baz al manifestului care
conine multe elemente descendente, care defines structura i lucrul aplicaiei. Ordinea localizrii
elementelor, care se afl la acelai nivel este arbitrar. Toate valorile se stabilesc prin atributele elementelor.
Atribute:
- xmlns:android- definete namespace pentru Android, i niciodat nu se schimb;
- package- defineste numele unic al pachetului aplicatiei, care este definita la etapa de creare a
aplicatiei;
- android:versionCode- indica la numarul intern al versiunii, utilizind pentru compararea versiunii
aplicaiei;
- android:versionName- indica numarul versiunii de utilizare.
Exemplu concret de fiier AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mark.paiip2" >

<uses-permission android:name="android.permission.INTERNET" />


<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
11
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".TwoActivity"
/>
</application>

</manifest>

7. Noiunea de Context

Cum sugereaz numele, contextul reprezint starea actual(curent) a aplicaiei/obiectului. El permite


obiectelor noi create s neleag ce are loc. Noi l apelm pentru a obine informaia referitoare despre o alt
parte a programului (activity, package/application). Putem obine contextul invocnd urmtoarele metode:
getApplicationContext(), getContext(), getBaseContext() sau this (cnd n clasa activitate ).

Cazuri tipice pentru a utilizarii contextului:


Crearea obiectelor noi se creaza view-uri, adapterem listenerrs
TextView tv = new TextView(getContext());
ListAdapter adapter = new SimpleCursorAdapter(getApplicationContext(), ...);
Accesarea resurselor comune servicii ca LAYOUT_INFLATER_SERVICE, SharedPreferences
context.getSystemService(LAYOUT_INFLATER_SERVICE)
getApplicationContext().getSharedPreferences(*name*, *mode*);
Accesarea componentelor implicate se are in vedere content provideri, broadcast, intenturi
getApplicationContext().getContentResolver().query(uri, ...);
Windows Phone

8. Noiunea de View(Interfa)(Layout)
Interfaa este procesul de redimensionare i poziionare a obiectelor n aplicaia pe WP. Pentru a poziiona
obiectele vizuale, ele trebuie de pus n container de control derivat din Panel(rinduri sus la XML) sau alte
obiecte de tip container. WP ofer urmtoarele controale de panel: Canvas, StackPanel i Grid care servete ca
container i permite s poziionezi i s aranjezi controalele de pe ecran.

Sistemul de interfa al WP suport att interfa dinamic ct i absolut (Absolute/Dynamic Layout). n


interfaa absolut controalele sunt poziionate utiliznd explicit coordonatele X,Y (utiliznd canvas). n interfaa
dinamic UI al aplicaiei se redimensioneaz automat la diferite rezoluii a ecranelor dispozitivelor (de
exemplu: utiliznd StackPanel sau Grid).

Panel controls

Panele interfeei incorporate in WP sunt: Canvas, StakPanel i Grid-ul.

12
Canvas

Definete o suprafa n care explicit se definete poziionare a elementelor descendente dup coordonatele
relative n suprafaa canvas. Exemplu (XAML):

<Canvas Background="Transparent">
<Rectangle Canvas.Left="30" Canvas.Top="200"
Fill="red" Width="200" Height="200" />
</Canvas>

StackPanel

Este o interfa simpl care aranjeaz elementele descendente ale ei ntr-o singur linie care poate fi orientat
orizontal sau vertical. Pentru a specifica orientarea utilizm proprietate orientation care arat direcia
descendenilor. Exemplu (XAML):

<StackPanel Margin="20">
<Rectangle Fill="Red" Width="50" Height="50" Margin="5" />
<Rectangle Fill="Blue" Width="50" Height="50" Margin="5" />
<Rectangle Fill="Green" Width="50" Height="50" Margin="5" />
<Rectangle Fill="Purple" Width="50" Height="50" Margin="5" />
</StackPanel>

Grid

Permite poziionare flexibil a elementelor pe ecran. El ofer posibilitatea de organiza elemente utiliznd
coloane i rnduri. Se permite redimensionarea spaiului ntre o coloan sau un rnd utiliznd auto sau *.
Descendenii unui grid sunt desenai n ordinea n care ei apar n XAML sau cod. Exemplu (XAML):

<Grid ShowGridLines="True" Margin="12,0,12,0">


<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition />
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBox Text="1st row 1st column" TextWrapping="Wrap" Grid.Column="0" Grid.Row="0" />
<TextBox Text="3rd row 1st column" TextWrapping="Wrap" Grid.Column="0" Grid.Row="2" />
<Button Content="1st row 2nd column" FontSize="17" Grid.Column="1" Grid.Row="0" />
<Button Content="3rd row 2nd column" FontSize="17" Grid.Column="1" Grid.Row="2" />
</Grid>

13
Dac vrem s crem o interfa complex care este greu de creat utiliznd Canvas, StackPanel sau Grid,
putem crea panele custom, care permite s definim comportamentul interfeei pentru panela descendet. Pentru
a face acest lucru vom deriva din Panel i vom suprascrie metodele MeasureOverride i ArrangeOverride.

9. XAML (mod de utilizare / componente)

Extensible Application Markup Language este un limbaj markup declarativ. In mod specific, permite
initializarea de obiecte si setarea proprietatilor acestora, folosind o structura de limbaj ce descrie relatii ierarhice
intre obiecte. In timp ce fisierele XAML in sine permit crearea interfetei utilizator, intr-un mod similar cu
fisierele HTML, exista fisiere de cod, care corespund fiecarui fisier XAML, ce permit separarea logicii de tratare
a evenimentelor si manipulare a obiectelor ce constituie interfata grafica.
<Button Content="OK" Click="Button_Click_1" Background="Red" Foreground="Black"
Height="25" Width="150" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10"/>

XAML este de asemenea folosit si in Windows Presentation Foundation, iar acest lucru permite migrarea
eficienta a interfetei utilizator intre Silverlight si WPF. Totusi, este important de precizat ca Silverlight foloseste
doar un subset al vocabularului XAML care este disponibil in WPF.Fisierele XAML au intotdeauna un singur
element care serveste ca radacina, si acel element declara obiectul care va fi radacina conceptuala a unei
structuri, cum ar fi o pagina, sau graful de obiecte din timpul executiei aplicatiei.

In XAML exista 3 metode de a declara obiecte:

Direct, folosind sintaxa obiect - element: se folosesc tag-uri de inchidere si deschidere "<" respectiv "/>"
pentru a instantia obiecte, intr-un stil ca si cel prezent in documentele XML. Se poate folosi aceasta metoda
pentru a declara obiecte radacina sau pentru a imbrica obiecte ce seteaza valorile proprietatilor. Pentru
convenienta, elementele ce nu mai contin alte elemente se pot inchide folosind "/>", fara a mai defini un tag
suplimentar. Exemplu:

<Grid>
<Rectangle/>
</Grid>

Indirect, folosind sintaxa atibut: se foloseste o valoare String inline, pentru a declara un obiect. Aceasta
metoda se poate folosi pentru a instantia orice alt obiect cu exceptia radacinii. Aceasta sintaxa este cel mai
adesea folosita pentru a seta valoarea unei proprietati. Pentru ca aceasta metoda sa functioneze, inseamna
ca tipul sau proprietatea setata suporta un convertor de tip care poate converti String-ul primit ca input, sau
ca parser-ul de XAML permite o conversie nativa. Cele doua exemple de mai jos produc un dreptunghi de
culoare albastra (rezultatul este la fel) :

14
<Rectangle Name="rectangle1" Width="100" Height="100">
<Rectangle.Fill>
<SolidColorBrush Color="Blue"/>
</Rectangle.Fill>
</Rectangle>

sau
<Rectangle Name="rectangle1" Width="100" Height="100" Fill="Blue" />

Folosind extensii markup: Folosirea de extensii markup este asociata cu folosirea acoladelor "{" si "}"
pentru a indica folosirea extensiilor. Acest lucru permite parser-ului XAML sa evite tratarea valorii unui
atribut ca String-ul efectiv sau ca si rezultatul conversiei din string. Silverlight permite mai multe extensii
markup ce sunt definite sub namespace-ul XAML si sunt intelese de parser-ul XAML. Extensiile markup
sunt adesea folosite pentru Binding sau StaticResource (resurse definite de obicei altundeva) :
<Canvas.Resources>
<Style TargetType="Border" x:Key="PageBackground">
<Setter Property="BorderBrush" Value="Blue"/>
<Setter Property="BorderThickness" Value="5"/>
</Style>
</Canvas.Resources>
...
<Border Style="{StaticResource PageBackground}">
...
</Border>

Motenirea view-urilor (n XAML sus acolo sunt nite rnduri de ex. xmlns care reprezint spaii de
nume)
Spaiile de nume XAML aplic la un element specific n care ele au fost declarate i pe de alt parte oricare
element care se conine n acel element n structura XAML. Din cauza asta, spaiile de nume din XAML sunt
declarate aproape tot timpul pe elemente printe care ie avantajele a conceptului de motenire.

USER CONTROL (clas)


User control furnizeaz interfaa iniial a utilizatorului i nodul iniial de vizualizare. User control este o
alegere logic ca i clasa de baz pentru un nod vizual iniial deoarece User controlul acoper toate cerinele
necesare. Alte 2 motive pentru crearea unui control care motenete de la User control sunt:
Separarea funcionalitilor n buci mai mici i uor de gestionat, care pot fi create independent dintr-
o aplicaie i alte controle.
De a grupa controale legate care pot fi utilizate de mai multe ori ntr-o aplicaie.

Un user control este compus din elemente existente. Adugm elemente n user control setnd proprietatea
Content.

Exemplu (XAML):
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
...>

15
10. UI Obj Events
Controalele Windows Phone

Navigation controls

Layout and grouping controls

Text controls

Button and selection controls

List controls

Image, map, and media controls

HTML controls

Progress and message controls

Navigation controls

Aplicaiile WP sunt bazate pe pagini, n care utilizatorii navigheaz nainte sau napoi prin diferite pagini a
contentului. Acest model este bazat pe frame-uri care conin controalele paginii pentru a naviga prin aplicaie.
Controale de navighare: PhoneApplicationFrame, PhoneApplicationPage.

Layout and grouping controls

Controalele interfeei sunt containere pentru alte controale i obiecte vizuale. Ele sunt utilizate pentru
poziionarea obiectelor vizuale pe ecran. Un control al interfeei servete ca interfa printe a aplicaiei n
interiorul unei pagini. Restul obiectelor n UI se conin n cest nod printe. Majoritatea controalelor interfeei
deriv din clasa panel. Exemple de controale interfeei ce deriv din panel sunt: StackPanel, Canvas i Grid.

Mai exist 2 controale adiionale: Panorama i Pivot, care le putem utiliza pentru a plasa aplicaii pe
dispozitiv.

Controalele interfeelor i gruparea elementelor: Border, Canvas, ContentControl, Grid, Panorama, Pivot,
StackPanel, VirtualizingStackPanel, ScrollViewer.
Text controls

De obicei ele afiseaza contentul de tip string. In diferite procese dunt diferite controale. Controalele de
text in WP: TextBlock, TextBox, PasswordBox.

16
Button and selection controls
Ele ofera navigarea si selectarea usoara in intreaga aplicatie. Multe butoane si controale de selectie deriva
de la ContentControl, ceia ce semnifica ca tu adaugi content in ele cu proprietatea contentului.

Controalele butoanelor: Button, HyperlinkButton

Controalele pentru selectie: CheckBox, RadioButton, Slider

List controls: ListBox, LongListSelector

Image, map, and media controls

Afiseaza resursele, asa ca: imagini, mape si media contentul ce formeaza interfata aplicatiei WP. Controalele
sunt: Image, Map, MediaElement.

HTML controls

Tu poti utiliza controlul webBrowser-ului pentru a afisa HTML pagini in aplicatie. Exista doar un singur
control: WebBrowser.

Progress and message controls

Sunt utilizate pentru a reprezenta operatiile care se fac greu. Controalele sunt: ProgressBar, Popup.

11. Layout i Evenimente


Layout - Un aspect(Layout) definete structura vizual pentru o interfa de utilizator , cum ar fi interfaa
pentru o activitate sau o aplicaie widget. Putei declara un aspect n dou moduri: Declara elemente UI n XML
. Android ofer un vocabular XML simplu care corespunde Vezi claselor i subclaselor, cum ar fi cele pentru
widget-uri i machete. Instantia elemente aspect n timpul rulrii. Cererea dumneavoastr poate crea Vezi i
ViewGroup obiecte ( i manipula proprietile lor) programatic. Cadrul Android v ofer flexibilitatea de a
utiliza una sau ambele dintre aceste metode pentru declararea i gestionarea UI cererea dumneavoastr . De
exemplu , ai putea s declare aspecte implicite aplicaiei dumneavoastr n XML , inclusiv elementele de ecran
care vor aprea n ei i proprietile lor . Ai putea apoi se adaug cod n cererea dumneavoastr care ar modifica
starea de obiecte de ecran, inclusiv cele declarate n XML , la momentul execuiei .

Evenimente

17
In sistemul Android este prevazut citeva posibilitati de a intercepta evenimente ce interactioneaza cu
utilizator. n ceea ce privete evenimentele in Interfata grafica, abordare este de a capta evenimente de la un
anumit obiect cu care un utilizator interacioneaz. Clasa care contine posibilitati de a face asta se numeste View

Event listener - este o interfata a clasei View, ea contine o metoda ce contine un apel invers. Aceste metode
se vor apela de platforma Android, ca un rezultat al interaciunii obiectului cu interfaa utilizatorului, se va
activeaza obiectul afisat View, in care este inregistrat receptorul.

Aceste metode sunt:


onClick();
onLongClick();
onFocusChange();
onKey();
onTouch();
onCreateContexMenu();

In exemplul de mai jos este prezentat cum de inregistrat un event listener pentru un buton (onClick)
// Create an anonymous implementation of OnClickListener private OnClickListener mCorkyListener = new OnClickListener() {
public void onClick(View v) {
// do something when the button is clicked
}
};
protected void onCreate(Bundle savedValues) {
...
// Capture our button from layout
Button button = (Button)findViewById(R.id.corky);
// Register the onClick listener with the implementation above button.setOnClickListener(mCorkyListener);
...}

Regimul Touch Mode


Atunci cind utilizatorul navigheaza pe Interfata Grafica cu ajutorul tastelor sau trackball, trebuie de trasmis
focusul elementelor active (asa ca butoane) ca utilizatorul sa observe ce element primeste focusul. Insa daca
device-ul sustine touch screen, utilizatorul incepe sa interactioneze cu UI prin tastarea directa a elementelor.
Odata cu tastarea unui element device-ul trece in regim de touch mode. Incepind din momentul dat, focusul
trece doar obiectelor care pentru isFocusableInTouchMode() este true, alte obiecte in acest moment nu vor putea
obtine focus.

General

18
12. Metode Asynchrone (async/await)

Odata cu C# 5.0 si .NET Framework 4.5, Microsoft a introdus in limbajul C# suport pentru programarea
asincrona prin cuvintele cheie async si await. Codul asincron starteaza o operatie care se dasfasoara pe un
termen mai lung si returneaza imediat controlul thread-ului, fara a bloca cursul evenimentelor asteptand
rezultatul operatiei. Cand operatia s-a terminat, suntem notificati de acest lucru prin diverse mecanisme cum ar
fi un event, un delegate sau expresie lambda, await, etc. Exemple de operatii "lungi" sunt accesul la diferite
periferice, accesul la retea/internet sau diferite intarzieri datorate unor procesari de date. Cuvintul cheie async
indic faptul c o metod sau o expresie lambda poate fi realizat n mod asincron dar operatorul await v
permite s opreasc thread-ul, pn cnd sarcina nu va fi finalizata ,marcata ca async.

Microsoft marsaluieste tare pe programarea asincrona. Astfel, in Silverlight a eliminat toate metodele
sincrone din clasele care contineau ambele perechi, sincrone si asincrone. Sub Windows 8 si .NET Framework
4.5, au fost deasemenea introduse o serie de metode asincrone, insa au ramas si echivalentele lor sincrone.

Putem evita blocajele de performanta si de a spori capacitatea unei aplicatii prin utilizarea de programare
asincron, cum ar fi atunci cind cererea dumeanovastra acceseaza pagina web, accesul la o resursa web uneori
este lenta sau intirziata.In acest caz activitatea este blocata intr-un process sincron.Intr-un process
asincron,aplicatia poate continua cu alte activitati care nu depin de resursa web.

Utilizarea perechii async/await a fost gandita astfel incat codul rezultat sa arate foarte asemanator cu
echivalentul sau sincron. In urmatorul exemplu voi prezenta o metoda care descarca o pagina WEB si o afiseaza
la consola.

private void PrintWebPage(string uri)


{
var client = new WebClient();
var page = client.DownloadString(uri);
Console.WriteLine(page);
}
Urmeaza echivalenta asincrona.
private async void PrintWebPageAsync(string uri)
{
var client = new WebClient();
var page = await client.DownloadStringTaskAsync(uri);
Console.WriteLine(page);
}
Se observa ca cele doua metode sunt foarte asemanatoare, diferenta constand in "decorarea" celei de-a doua
metode cu async si await si apelarea variantei asincrone DownloadStringTaskAsync. Prin conventie, o metoda
asincrona va contine sufixul Async.

Aparent asemanatoare, cele doua metode sunt intern complet diferite. Compilatorul C#, cand va intalni
cuvantul cheie await, va imparti metoda in doua iar tot codul de dupa await il va introduce in ce-a de-a doua
19
parte/metoda. Putem verifica acest aspect urmarind codul IL rezultat.La runtime, se executa codul pana se
intalneste metoda DownloadStringTaskAsync, dupa care se incepe descarcarea paginii dar nu pe thread-ul
curent. Thread-ul curent va preda controlul actiunilor utilizator, daca e un UI thread, altfel resursele threadului
vor fi eliberate.

De mentionat, ca await poate fi folosit doar in interiorul unei metode asincrone, prefixata de async, dupa
cum se poate vedea si-n exemplul de mai sus.O metoda asincrona poate returna doar trei tipuri de date, si anume,
void, Task si Task< T> unde T poate fi orice fel de tip de date. Alte tipuri de date nu sunt permise deoarece
metodele asincrone nu blocheaza si au asociat un mecanism de notificare la terminarea executiei metodei, care
cunoaste doar cele trei tipuri de date ca rezultat. Astfel, daca avem nevoie de o metoda care returneaza o valoare
de tip int, atunci tipul de retur al metodei asincrone ete Task< int> iar in corpul metodei vom avea la un moment
dat o declaratie de forma "return valoare_int;". Daca avem nevoie de o metoda care nu returneaza nimic (void),
atunci tipul de retur al metodei asincrone este Task iar in corpul metodei vom avea la un moment dat o declaratie
de forma "return;" sau nimic (apelul return nu este obligatoriu).Exemplu:

private async void PrintWebPage1Async(string uri)


{
var client = new WebClient();
var page = await client.DownloadStringTaskAsync(uri);
Console.WriteLine(page);
}

private async Task PrintWebPage2Async(string uri)


{
var client = new WebClient();
var page = await client.DownloadStringTaskAsync(uri);
Console.WriteLine(page);
}

private async Task< string> GetWebPageAsync(string uri)


{
var client = new WebClient();
var page = await client.DownloadStringTaskAsync(uri);
return page;
}
Nota: metoda async va rula in mod sincron daca nu va contine cheia await .

13. Task and Threads


Thread

De multe ori, aplicatiile au nevoie de mult timp pentru a rezolva o sarcina (descarcarea unui fisier, printare,
generarea unui raport etc), timp in care programul nu poate raspunde unei alte actiuni a utilizatorului. Pentru a
face ca o aplicatie sa indeplineasca o sarcina si sa poata primi si altele in acelasi timp, sunt folosite firele de
executie multiple (multiple threads).

20
Intr-un program liniar se executa o singura linie de cod, se asteapta pentru completare si apoi se continua
cu urmatoarea linie de cod. Programul nu poate raspunde actiunii unui utilizator in acest timp si chiar in cazul
mai multor procesoare, va fi folosit doar unul singur, limitand performanta, datorita programarii single-thread.

Un fir de executie (thread) este un program secvential, care poate fi executat concurent cu alte fire. Un
thread este o unitate de executie intr-un proces. Un proces poate avea mai multe fire de executie, el numindu-
se multithread. Daca un calculator are mai multe procesoare sau un procesor cu mai multe nuclee, el poate
executa mai multe fire de executie simultan.

Diferenta dintre un proces si un thread este ca procesele sunt izolate total unul de celalalt, in timp ce thread-
urile impart aceeasi memorie (heap) cu alte thread-uri care ruleaza in aceeasi aplicatie (un thread poate prelua
informatii noi, in timp ce un alt thread le prelucreaza pe cele existente).

Un fir de executie, thread, poate avea mai multe stari.

Task

Un Task reprezint o operaie asincron care ne poate reprezenta set de API-uri pentru a rula sarcini asincron
i n paralel.

Task este mai mult dect o abstracie - este ntr-adevr "promisiunea unui rezultat n viitor"

Diferenta intre Thread si Taks este

1) Fiecare thread consuma o cantitate non-trivial de memorie pentru stiva sa, i adaug operatii
suplimentare CPU pentru comutarea ntre fire.
2) Cea mai buna diferenta inre task si thread este insusi programarea in parallel pe care o poate oferi
Task-ul.
Thread.Sleep ()- Acesta este modul clasic de a suspenda executarea. Aceast metod va suspenda
firul curent pn la valoarea dat de timp a trecut , pe cind Task.Delay() acioneaz ntr-un mod foarte
diferit de Thread.Sleep. Practic. Task.Delay va crea o sarcin care se va finaliza dup un interval de
timp. Task.Delay nu blocheaz firul de asteptare, astfel nct UI va rmne receptiv.

21
Crearea unui Task se poate realiza urmarind mai multe scenarii.

Scenariul 1. Creare a unei instante a tipului Task urmat de apelul metodei Start().

var taskA = new Task(() => Console.WriteLine("Hello from taskA.")); // Lansare taskA
taskA.Start();
Cnd se termin un fir de execuie:

O deosebita atenie trebuie data modului in care un fir de execuie se termina. Terminarea unui fir de execuie
utiliznd metoda stop() nu este recomandata, de altfel, aceasta metoda este deprecated (nu mai este
recomandat de ctre Sun pentru a fi utilizat). Calea recomandata de terminare a unui fir este prin revenirea
normala ( return ) din run(). Aadar in cadrul metodei run se recomand adugarea unor blocuri condiinale care
s determine terminarea firului de execuie, respectiv ieirea din metoda run.

Acest mecanism nu este util de fiecare data deoarece in momentul in care un fir este blocat ( datorita unor
instruciuni wai(), sleep(), join(), operatii I/O ), acesta nu poate verifica nici o condiie. Pentru a termina un fir
care este blocat se utilizeaz metoda interrup(). Aceasta metoda determina aruncarea unei excepii
InterruptedException care trebuie prinsa.

Exit code

ExitCode se foloseste pentru a obtine statutul unui process la terminarea lui. Puteti utiliza ExitCodul ca o
variabila integer pentru a returna o valoare dintr-o procedura. In general serveste ca o variabila decizionala

WaitForSingleObject

Functia WaitForSingleObject verifica starea curenta a obiectului specificat. Daca starea obiectului este
nesemnalata, atunci firul de asteptare intra in stare de asteptare, pina cind obiectul devine semnalizat sau
intervalul de timp a depasit norma sa.

Functia WaitForSingleObject poate astepta urmatoarele obiecte: Change Notification; Console input; Event;
Mutex, Process, Thread etc.

14. Protocolul HTTP


Hypertext Transfer Protocol (HTTP) este metoda cea mai des utilizat pentru accesarea informaiilor n Internet care sunt
pstrate pe servere World Wide Web.

Deseori utilizatorul dorete s transmit informaii speciale la website. Aici HTTP pune la dispozitie dou posibiliti:

Transferul datelor n combinaie cu o cerere pentru o resurs (HTTP-metoda "GET")


Transferul datelor n combinaie cu o cerere special (HTTP-metoda "POST")

22
(Exemplu: la pagina de start de la Wikipedia.ro utilizatorul introduce n cmpul de cutare termenul "pisici".. Atunci browserul
trimite urmtoarea cerere la server:GET /wiki/special:Search?search=pisici&go)

Erorile de HTTP sunt clasificate n 5 clase (categorii). Acestea sunt (pentru fiecare clasa sunt date cteva dintre erorile coninute):

1xx - erori informaionale:

100 - contiunu:
Utilizatorul ar trebui s i continue cererea/aciunea. Acest rspuns provizoriu este folosit pentru a informa utilizatorul c partea
iniial a cererii a fost receptat i c deocamdat nu a fost refuzat de server. Utilizatorul ar trebui s continue i s ignore acest
rspuns.

101 - schimbare protocol.

2xx - rspuns reuit: clasa de rspuns/status ce indic utilizatorului c cererea a fost primit, neleas i acceptat cu succes.

200 - ok:
Aceast cerere a fost executat cu succes. Informaia a revenit cu un rspuns pozitiv, indiferent de modul n care s-a fcut cererea.

202 - acceptat:
Cererea a fost acceptata pentru procesare, dar aceasta din urm nu a fost terminat complet. Scopul acestui mesaj este de a permite
unui server s accepte cereri de la ali utilizatori, fr a cere conexiunii clientului s insiste pn ce procesul/cererea e complet.

3xx - redirectri:

4xx - erori ale utilizatorilor: aceast clas de mesaje/statusuri este folosit n cazurile n care utilizatorul ar putea grei
formularea cererii. Excepia fiind rspunsurule pentru cererile tip Direcionat/condus, atunci serverul ar trebui s conin o intrare
cu o explicaie a situaiei erorii i dac e o eroare temporar sau pemanent. Aceste rspunsuri sunt aplicabile pentru orice fel de
cerere. Browser-ele ar trebui s arate orice intrare cerut de utilizator.

400 - cerere greit:


Cererea nu a putut fi neleas/perceput de ctre server din cauza unei sintaxe greite/incomplete. Utilizatorul ar trebui s nu repete
cererea fr ca aceasta s suporte modificri.

401 - neautorizat:

15. Metodele i cmpurile prot. HTTP


Cmpuri-mrimea pachetului, cookies

METODE
Metodele disponibile sunt :

GET: este cea mai folosit metod, fiind utilizat atunci cnd serverului i se cere o resurs.

23
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. Accesibilitatea
resursei(desktop /mobile).

PUT: metoda este folosit pentru a depune documente pe server, fiind inversul metodei GET.

POST: a fost proiectat pentru a trimite date de intrare ctre server.

DELETE: este opusul metodei PUT.

TRACE: este o metod folosit de obicei pentru diagnosticare, putnd da mai multe informaii despre
traseul urmat de legtura HTTP, fiecare server proxy adugndu-i semntura n antetul Via.

OPTIONS: este folosit pentru identificarea capacitilor serverului Web, nainte de a face o cerere.

CONNECT: este o metod folosit n general de serverele intermediare.

Cmpurile header HTTP sunt componente ale seciunii mesajelor de cerere i de rspuns n Hypertext
Transfer Protocol (HTTP). Ele definesc parametrii de funcionare ai unei tranzacii HTTP.

Request fields

Accept Tip de content (Content Type) care este acceptat la raspuns

Accept-Charset seturi de caractere acceptabile

Cache-Control - Folosite pentru a specifica directive care trebuie s fie respectate de toate mecanismele de
caching de-a lungul lanului de cerere-rspuns

Authentification - Acreditrile de autentificare pentru autentificarea HTTP.

Cookie - Un cookie HTTP(o mic bucat de date trimise de pagina web i stocate n browser-ul web al
utilizatorului,) trimise anterior de server cu Set-Cookie(metoda de raspuns)

Content-Length - Lungimea corpului de (request) cerere in octeti (8 bii bytes)

Expect - Indic faptul c anumite comportamente de server sunt cerute de client

Referer - Aceasta este adresa paginii web anterioar de la care a fost urmat un link ctre pagina

Date - The date and time that the message was sent solicitat n present

Response fields

Cache-Control - Spune tuturor mecanismelor de caching de la server la client dac acestea pot (cache )acest
obiect. Aceasta este msurat n secunde
24
Content-Encoding - Tipul de codare utilizat pe datele

Location - Folosit n redirecionarea, sau atunci cnd o nou resurs a fost creat.

Accept-Patch - Specific formate de documente este suportat de server

Refresh- folosit n redirecionarea, sau atunci cnd o nou resurs a fost creat

Set Cookie- un http cookie

Upgrade- cere clientului pentru a face upgrade la un alt protocol.

16. XML/Json (metode de serializare/deserializare)


XML (eXtensible Markup Language), este un meta-limbaj utilizat in activitatea de marcare structurala a
documentelor. Documentele XML sunt realizate din unitati de stocare numite entitati, ce contin date parsate
sau neparsate. Datele parsate sunt realizate din caractere, unele dintre ele formand date caracter iar altele ca
marcaje. Marcajele codifica o descriere a schemei de stocare a documentului si structura logica. XML
furnizeaza un mecanism pentru a impune constringeri asupra schemei de stocare si a structurii logice.

Un document XML este format din marcaje (tag-uri) si date caracter.

Cuvantul marcaj (markup) a fost folosit initial pentru a descrie anumite adnotari, note marginale in cadrul
unui text cu intentia de a indica tehnoredactorului cum trebuie listat un anumit pasaj. Generalizand, putem
defini marcajul drept orice actiune de a interpreta explicit o portiune de interpreta explicit o portiune de text.

Un marcaj (tag) este un sir de caractere delimitat de caracterele "<" si ">". Datele caracterreprezinta
continutul marcajelor.

n XML, marcajele nu sunt folosite pentru afisarea datelor continute, ci au alte scopuri printre care:

asigura o sintaxa simpla si standardizata pe care analizoarele XML o pot folosi pentru a utiliza
informatia stocata
asigura o metoda de a descrie structura ierarhica a continutului prin impartirea informatiei (datele
caracter) in parti numite elemente care mai departe sunt descrise prin atribute. Structura ierarhica a
intregului document este pusa in evidenta prin utilizarea marcajelor.
Un fisier XML cuprinde urmatoarele sectiuni:

Prolog
Definitia tipului de document (optionala)
Elementul radacina

25
De ce folosim XML in Android in Layout

R/S:

- delimiteaza aplicatia in partea functionala de cea vizuala


- este usor de parsat
- este usor de citit pentru omanei
- consuma putina memorie
- un numar mare de IDE suporta formatul dat.

JSON este un acronim n limba englez pentru JavaScript Object Notation, i este un format de reprezentare i interschimb
de date ntre aplicaii informatice. Utilizat pentru reprezentarea obiectelor i a altor structuri de date i este folosit n special
pentru a transmite date structurate prin reea, procesul purtnd numele de serializare.

In c# , seriaizarea are loc prin Json.NET - un popular JSon framework pentru .NET

Cea mai rapid metod de conversie dintre text i JSON obiect .NET utilizarea metodei
JsonSerializer.JsonSerializer convertete .NET obiecte n echivalentul lor JSON si maparea obiect .NET,
numele de proprietate la numele de proprietate JSON i copii valorile pentru tine.

Deseralizarea reprezinta convertarea fisierului json In Obiecte.

Product product = new Product();

product.Name = "Apple";
product.ExpiryDate = new DateTime(2008, 12, 28);
product.Price = 3.99M;
product.Sizes = new string[] { "Small", "Medium", "Large" };
string output = JsonConvert.SerializeObject(product);
Product deserializedProduct = JsonConvert.DeserializeObject<Product>(output);

17. generale i moduri de utilizare RegEx


Ea reprezint o expresie regulat neschimbtoare.

Biblioteca : System.Text.RegularExpressions.Regex

Expresii regulate ofer un mod puternic, flexibil i eficient de manipulare a textlui . Expresiile regulate ne permit s analizam
rapid cantiti mari de text pentru a gsi modele de caractere specifice, verificai textul la template-uri predefinite (de exemplu, e-
mail, prelua, modifica, nlocui sau terge subir text.

Metode Utilizate:

1) IsMatch (String)

Indic dac expresia regulat specificat n constructorul Regex gsete o potrivire ntr-un ir de intrare specificat.

2) Replace(String,String)
26
ntr-un ir de intrare specificat, nlocuiete toate siruri de caractere care se potrivesc cu o expresie regulat
specificat cu un ir de returnat de un string

3) Split (String, String)

mparte un ir de intrare ntr-o serie de subsirurii de la poziiile definite de un model expresie regulat.

using System;
using System.Text.RegularExpressions;

class Program
{
static void Main()
{
Regex regex = new Regex(@"\d+");
Match match = regex.Match("Dot 55 Perls");
if (match.Success)
{
Console.WriteLine(match.Value);
}
}
}

Output

18. HTML Parsing/xPath()


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 coninutului unui
document XML.Limbajul XPath este structurat sub form de arbore a documentului XML, oferind posibilitatea
de a naviga n acest arbore, prin selecia nodurilor XML care satisfac diferite criterii. Cea mai ntlnit metod
a expresiilor XPath este path expression. Un path expression este scris ca o secven de pai pentru a ajunge
dintr-un nod XML ('context node'-ul curent) la un alt nod sau un alt set de noduri. Paii sunt separai de
caracterul "/" (ex. path). Fiecare pas are trei componente:

Specificatorul de axe
Node Test
Predicat

Parsarea HTML cu ajutorul Xpath ()/C#

Clase utilizate

1) HtmlNode un nod HTML


2) HTMLParseError reprezinta un error de parsing
27
3) HTMLWeb clasa utilizata pentru a extrage un document HTML dintr-un HTTP
Metode utilziate :

1) GetElementbyID
2) LoadHtml()
HtmlDocument html = new HtmlDocument();
html.LoadHtml(wClient.DownloadString(job.Url));
static void GetJobLinks(HtmlDocument html)

{ var trNodes = html.GetElementbyId(jobitems).ChildNodes.Where(x => x.Name == tr); }

Acesta este un parser HTML agil care construiete o citire / scriere DOM i sprijin XPATH simplu sau
XSLT Este o bibliotec de cod .NET, care v permite s elimine "din web" fiiere HTML. Modelul obiect este
foarte similar cu ceea ce propune System.Xml, dar pentru documentele HTML (sau fluxuri). Html Agility Pack
suport acum LINQ to Objects (printr-un LINQ n XML ca interfa). Exemple de aplicatii: Fixare pagina sau
generaie. Putei modifica o pagin aa cum dorii, modificai DOM, adugai noduri, copiai noduri, bine ... ce
vrei tu. Scanere web. Putei obine cu uurin la img / src sau a / hrefs cu un buchet interogri XPATH.

Exemplu

Sa presupunem ca avem un mic cod HTML numit LomakeTaustaVari;

{
HtmlAgilityPack.HtmlWeb web = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = web.Load ("https://www.op.fi/op/henkiloasiakkaat/saastot-ja-sijoitukset/kurssit-ja-
markkinat/markkinat?sivu=alltrades.html&sym=KNEBV.HSE&from=10:00&to=19:00&id=32453");

foreach (HtmlNode row in doc.DocumentNode.SelectNodes("//tr[@class='LomakeTaustaVari']"))


{
Console.WriteLine(row.InnerText);
}
Console.ReadKey();
}

Exemplu 2

html

head

titleTest Html/title

/head

body

span This is span 1 /span

span This is span 2 /span


28
span This is span 3 /span

/body

/html

Codul urmtor ofer accesul la toate intervalele (Span) nutru la pagina html

try{ HtmlDocument HD = new HtmlDocument();

HD.Load(new StringReader(rawHTML));

//rawHTML will contain the above HTML.

var SpanNodes = HD.DocumentNode.SelectNodes("//span");

//for details of XPath syntax see the above table, // operater returns

//all nodes matching the name after //. In above example it will return all

//span nodes.

if (SpanNodes != null) {

foreach(SpanNodes SN in HeadingNodes){

string text = SN.FirstChild.InnerText.Trim();

Console.WriteLine(text); //Will output all span's text } }

}catch(Exception e)

{ //Write your exception handling code here}

19. XML Parsing


Parsarea XML se refera la accesarea si modificarea datelor in fisierul XML.

In Java, exista multiple optiuni a parsarea fisierului XML. Cele mai renumite tehnici de parsarea datelor.

DOM Parser Parsaeza documentul incarcind continutul documentului si creaza un arbore complet in
memoria interna
SAX Parser Parseaza documentul utilizind triggere. Nu incarca intregul document.
JDOM Parser parseaza documentul in aceiasi modalitate ca si DOM Parser.
StAX Parser Parseaza documentul ca si SAX, numai mai eficient.
XPath Parser Parseaza documentul utilizind expresii conjugate cu XSLT
Exemplu (DOM Parser JAVA)

1. Importam XML packages

import org.w3c.dom.*;

import javax.xml.parsers.*;

import java.io.*;

29
2. Cream un DocumentBuilder

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

DocumentBuilder builder = factory.newDocumentBuilder();

3. Cream documentul din fisier

StringBuilder xmlStringBuilder = new StringBuilder();

xmlStringBuilder.append("<?xml version="1.0"?> <class> </class>");

ByteArrayInputStream input = new ByteArrayInputStream(

xmlStringBuilder.toString().getBytes("UTF-8"));

Document doc = builder.parse(input);

4. Extragem elementul de baza

Element root = document.getDocumentElement();

5. Examenam atributele

//returns specific attribute

getAttribute("attributeName");

//returns a Map (table) of names/values

getAttributes();

6. Examinam sub-elemente

//returns a list of subelements of specified name

getElementsByTagName("subelementName");

//returns a list of all child nodes

getChildNodes();

Fisierul XML

<?xml version="1.0"?>
<class>
<student rollno="393">
<firstname>dinkar</firstname>
<lastname>kad</lastname>
<nickname>dinkar</nickname>

30
<marks>85</marks>
</student>
<student rollno="493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>vinni</nickname>
<marks>95</marks>
</student>
<student rollno="593">
<firstname>jasvir</firstname>
<lastname>singn</lastname>
<nickname>jazz</nickname>
<marks>90</marks>
</student>
</class>

Cod

package com.tutorialspoint.xml;

import java.io.File;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.DocumentBuilder;

import org.w3c.dom.Document;

import org.w3c.dom.NodeList;

import org.w3c.dom.Node;

import org.w3c.dom.Element;

public class DomParserDemo {

public static void main(String[] args){

try {

File inputFile = new File("input.txt");

DocumentBuilderFactory dbFactory

= DocumentBuilderFactory.newInstance();

DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();

Document doc = dBuilder.parse(inputFile);

doc.getDocumentElement().normalize();

31
System.out.println("Root element :" + doc.getDocumentElement().getNodeName());

NodeList nList = doc.getElementsByTagName("student");

System.out.println("----------------------------");

for (int temp = 0; temp < nList.getLength(); temp++) {

Node nNode = nList.item(temp);

System.out.println("\nCurrent Element :" + nNode.getNodeName());

if (nNode.getNodeType() == Node.ELEMENT_NODE) {

Element eElement = (Element) nNode;

System.out.println("Student roll no : "

+ eElement.getAttribute("rollno"));

System.out.println("First Name : "

+ eElement

.getElementsByTagName("firstname")

.item(0)

.getTextContent());

System.out.println("Last Name : "

+ eElement

.getElementsByTagName("lastname")

.item(0)

.getTextContent());

System.out.println("Nick Name : "

+ eElement

.getElementsByTagName("nickname")

.item(0)

.getTextContent());

System.out.println("Marks : "

+ eElement

.getElementsByTagName("marks")

.item(0)

.getTextContent());

} catch (Exception e) {

e.printStackTrace();

32
}

20. Elementele UI la Android si WP


ANDROID

Layouts FrameLayout, LinearLayout (Horizontal,Vertical), TableLayout, TableRow, GridLayout,


RelativeLayout

Widgets Plain TextView, Large Text, Medium Text, Small Text, Button, Small Button, Radiobutton,
CheckBox, Switch, ToggleButton, ImageButton, ImageView, ProgressBar, Spinner

Text Fields Plain Text, Person Name, Password, Phone, Time, Date, Number etc.

Containers RadioGroup, ListView, ScrollView, VideoView etc.

Date & Time TextClock, AnalogClock, DatePicker, TimePicker, CalendarView etc.

Expert SurfaceView, ZoomButton etc.

WINDOWS PHONE

Pointer, Border, Button, Canvas, CheckBox, ContentControl, DrawingSurface, Ellipse, Grid, Image,
LongListSelector, Map, MediaElement, Panorama, PasswordBox, Pivot, ProgressBar, RadioButton, Rectangle,
ScrollBar, ScrollViewer, Slider, StackPanel, TextBlock, TextBox, WebBrowser

21. Semafor
Semafor este un constructor folosit pentru a seta limita numrului de fire care pot avea acces la o seciune
critic. O seciune critic este o structur de date sau un dispozitiv care este mprtit de fire diferite, dar
numai un singur fir il poate accesa la un moment dat. Este adesea descris ca un club de noapte (semaforului)
unde vizitatorii (fire) se afl ntr-o coad n afara club de noapte de ateptare pentru cineva s plece pentru a
ctiga intrare.

Tip System.Threading.Semaphore n ansamblu System.dll ofer mecanism pentru a realiza acest lucru.

Primul pas n utilizarea clasa Semafor este de a crea o instan de Semafor obiect, n primul rnd parametru
este numrul de sloturi disponibile pentru alte fire i al doilea parametru este numrul maxim de sloturi
disponibile.

Semaphore(Int32,Int32): constructor - primul specifica orice numar de obiecte vor fi


disponibile iniial in semafor, iar al doilea parametru specific un numr maxim de obiecte ce
va folosi acest semafor

33
Pentru a crea un semafor folosim clasa Semafor :

static Semaphore sem = new Semaphore(3, 3);

Cnd un fir intr n seciunea critic el apeleaza metoda WaitOne () i dup ieirea din seciunea critic l
apeleaza metoda Release (). Nr semafor este decrementat atunci cnd un fir intr seciune critic (WaitOne ())
i crete atunci cnd firul iese din seciunea critic (Release ()). Cnd numrul de devine zero, fire ulterioare
vor fi blocate pn alte fire vor elibera semafor.

Using the code

using System;
using System.Threading;
namespace threadingSemaphore
{
class Akshay
{
static Thread[] threads = new Thread[10];
static Semaphore sem = new Semaphore(3, 3);
static void C_sharpcorner()
{
Console.WriteLine("{0} is waiting in line...", Thread.CurrentThread.Name);
sem.WaitOne();
Console.WriteLine("{0} enters the C_sharpcorner.com!", Thread.CurrentThread.Name);
Thread.Sleep(300);
Console.WriteLine("{0} is leaving the C_sharpcorner.com", Thread.CurrentThread.Name);
sem.Release();
}
static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
{
threads[i] = new Thread(C_sharpcorner);
threads[i].Name = "thread_" + i;
threads[i].Start();
}
Console.Read();
}
}
}

Output

34
22. Biletul nr.6
Test gril
- Indicai cele 3 bucle principale ce monitorizeaz o activitate ?

R/S: Entire lifetime, Foreground lifetime, (visible lifetime nui in raspunsuri, dar asta ii corecta)

- Ce afirmaie de mai jos definete noiunea de intent ?

R/S: 1. Afieaz mesaje de notificare din Android

2. Utilizeaz componentele predefinite ale sistemului

- Ce este AndroidManifest.xml

R/S: 1. Conine informaii despre aplicaie

2. acest fiier este esenial n orice aplicaie

- Ce este Google Android SDK ?

R/S: este un set de instrumente pentru dezvoltare

Problematica programrii aplicaiilor multithreading. Metode de sincronizare


a firelor de execuie
Problematic programarii - Aplicaiile (C#)

1) Threadurile fac schimb de date n cazul n care au o referin comun la aceeai instan de obiect
35
2) Blocurile din firul de background nu sunt executate atunci cnd se termin procesul.

3) Metoda stop() aceasta metoda se considera depreciat, in schimbul ei se recomanda folosirea metodei
return din run(). In metoda run() se recomanda adugarea unor blocuri condiinale care s determine terminarea
firului de execuie, respectiv ieirea din metoda data. Acest mecanism nu este util de fiecare data deoarece in
momentul in care un fir este blocat , acesta nu poate verifica nici o condiie. Pentru a termina un fir care este
blocat se utilizeaz metoda interrup().

4) Dificultate de scrierea de cod - Multithreaded i aplicaii de context multiple nu sunt uor de a scrie.
Numai programatori experimentati trebuie s ntreprind de codificare pentru aceste tipuri de aplicaii.

5) De fiecare dat cnd creai un fir, sistemul consum memorie de a deine informaii context pentru firul.
Prin urmare, numrul de fire pe care le putei crea este limitat de cantitatea de memorie disponibil

Metode de sincronizare a firelor de executie (JAVA)

Fiecare fir de executie are o viata proprie si nu este interesat de ceea ce fac celelalte fire de executie
Totusi apare o problema in cazul aplicatiilor care se ruleaza pe mai multe fire si anume accesul resurselor
comune. Ca sa nu apara probleme, accesul la resursele utilizate in comun trebuie sincronizat.

Sincronizarea se bazeaza pe conceptul de monitor. Un monitor este de fapt un lacat atasat unei resurse
pentru a preveni utilizarea resursei in paralel.
Un fir de executie ocupa un monitor daca apeleaza o metoda sincronizata. Daca un fir ocupa un monitor, un
alt fir care incearca ocuparea aceluiasi monitor, este blocat si asteapta pana la eliberarea monitorului. Oricare
obiect, care contine unul sau mai multe metode sincronizate, are si un monitor atasat. Metodele sincronizate se
definesc in modul urmator:

public synchronized void my_method() {...}

Orice clasa Java are un monitor atasat. Acest monitor se deosebeste de monitoarele atasate obiectelor, se
utilizeaza cand se apeleaza metodele statice sincronizate ale clasei.

public static synchronized void my_static_method() {...}

wait() si notify()

Cu ajutorul cuvantului-cheie synchronized putem serializa executia anumitor metode.


Metodele wait() si notify() ale clasei Object extind aceasta capabilitate. Utilizand wait() si notify(), un fir de
executie poate elibera monitorul ocupat, asteptand un semnal pentru reocuparea acestuia. Metodele pot fi
utilizate doar in metode sincronizate sau in blocuri de instructiuni sincronizate. Executand wait() intr-un bloc
sincronizat, firul elibereaza monitorul si adoarme. De obicei firul recurge la aceasta posibilitate cand trebuie sa
astepte aparitia unui eveniment intr-o alta parte a aplicatiei. Mai tarziu, cand apare evenimentul, firul, in care a

36
aparut evenimentul, apeleaza notify() pentru a trezi firul adormit. Firul trezit ocupa din nou monitorul si isi
continua activitatea din punctul de intrerupere.

class MyClass{
public synchronized void method1(){}
public synchronized void method2(){}
public static synchronized void method3(){}
}
...
MyClass object1 = new MyClass(); // Se ataseaza un monitor obiect pentru sincronizarea accesului
la metodele method1() si method2() pentru firele de executie al obiectului object1
MyClass object2 = new MyClass(); // Se ataseaza un monitor obiect pentru sincronizarea accesului
la metodele method1() si method2() pentru firele de executie al obiectului object2

Pentru exemplul precedent se vor crea trei monitoare. Un monitor de clasa, care este responsabil pentru
sincronizarea accesului la metoda statica ( metoda clasei) method3() si doua monitoare obiect, cate unul pentru
fiecare obiect declarat pentru sincronizarea accesului la method1() si method2()

Metoda notify() anunta intotdeauna un singur fir de executie care asteapta pentru a accesa monitorul. Exista
si o alta metoda notifyAll() care se utilizeaza atunci cand mai multe fire de executie concureaza pentru acelasi
monitor. In acest caz fiecare fir este instiintat si ele vor concura pentru obtinerea monitorului.
Metodele wait(), notify() si notifyAll() se utilizeaza doar in metode sincronizate, altfel mediul de executi arunca
exceptia IllegalMonitorStateException. Exemplul urmator se compileaza fara erori, dar se arunca aceasta
exceptie pe parcursul executiei.

public class test{


public test(){
try{
wait();
}
catch( InterruptedException e ){}
}

public static void main( String args[] ){


test t = new test();
}
}

Metode de sincronizare a firelor de execuie. Schimb de date/parametri ntre


fire de execuie secundare cu cei de baz
Pentru o comunicare sincrona dintre firul principal si cele secundare, poate di folosita SynchronousQueue.
Ideia consta in aceia ca firul principal transmite date in firul secundar apelind metoda put(), iar firul care
proceseaza cheama metoda take(). Ambele blocheaza operatiile.Daca doriti sa transmiteti datele inapoi
(rezultatul), este necesar de spus firului principal ca el sa astepte rezultatul. Pentru asta se
foloseste CountDownLatch.

Exemplu:

1. Definim structura care va transmite datele


public class MethodCall {

37
public final String methodName;

public final Object[] args;

public final CountDownLatch resultReady;

public Object result;

public MethodCall(String methodName, Object[] args) {


this.methodName = methodName;
this.args = args;
this.resultReady = new CountDownLatch(1);
}

public void setResult(Object result) {


this.result = result;
resultReady.countDown();
}

public Object getResult() throws InterruptedException {


resultReady.await();
return result;
}
}

2. Definim coada pentru a transmite date, care sunt vizibile in ambele fire.
public SynchronousQueue<MethodCall> methodCalls = new
SynchronousQueue<MethodCall>();

3. Pentru a efectua un apel din firul de baza la un fir secundar si de spus ca sa astepte rezultat
MethodCall call = new MethodCall(methodName, args);

methodCalls.put(call);

Object result = call.getResult();

4. In firul care proceseaza in instanta run(), trebuie de facut


for (;;) {
MethodCall call = methodCalls.take();
Object res = processStuff(call.methodName, call.args);
call.setResult(res);
}

Unde: processStuff implementeaza logica.

Dai definire noiunii de interfa (view). Elemente structurale definite de un


fiier XAML
38
Interfata = View = Page serveste pentru utilizatorii care navigheaz nainte sau napoi prin diferite pagini a
contentului

Controalele Windows Phone


Navigation controls
Layout and grouping controls
Text controls
Button and selection controls
List controls
Image, map, and media controls
HTML controls
Progress and message controls

Navigation controls
Aplicaiile WP sunt bazate pe pagini, n care utilizatorii navigheaz nainte sau napoi prin diferite pagini a
contentului. Acest model este bazat pe frame-uri care conin controalele paginii pentru a naviga prin aplicaie.
Controale de navighare: PhoneApplicationFrame, PhoneApplicationPage.
Layout and grouping controls
Controalele interfeei sunt containere pentru alte controale i obiecte vizuale. Ele sunt utilizate pentru
poziionarea obiectelor vizuale pe ecran. Un control al interfeei servete ca interfa printe a aplicaiei n
interiorul unei pagini. Restul obiectelor n UI se conin n cest nod printe. Majoritatea controalelor interfeei
deriv din clasa panel. Exemple de controale interfeei ce deriv din panel sunt: StackPanel, Canvas i Grid.
Mai exist 2 controale adiionale: Panorama i Pivot, care le putem utiliza pentru a plasa aplicaii pe dispozitiv.
Controalele interfeelor i gruparea elementelor: Border, Canvas, ContentControl, Grid, Panorama, Pivot,
StackPanel, VirtualizingStackPanel, ScrollViewer. Text controls
De obicei ele afiseaza contentul de tip string. In diferite procese dunt diferite controale. Controalele de text in
WP: TextBlock, TextBox, PasswordBox.
Button and selection controls
Ele ofera navigarea si selectarea usoara in intreaga aplicatie. Multe butoane si controale de selectie deriva de la
ContentControl, ceia ce semnifica ca tu adaugi content in ele cu proprietatea contentului.
Controalele butoanelor: Button, HyperlinkButton
Controalele pentru selectie: CheckBox, RadioButton, Slider
List controls: ListBox, LongListSelector
Image, map, and media controls
Afiseaza resursele, asa ca: imagini, mape si media contentul ce formeaza interfata aplicatiei WP. Controalele
sunt: Image, Map, MediaElement.
HTML controls
Tu poti utiliza controlul webBrowser-ului pentru a afisa HTML pagini in aplicatie. Exista doar un singur control:
WebBrowser.
Progress and message controls
Sunt utilizate pentru a reprezenta operatiile care se fac greu. Controalele sunt: ProgressBar, Popup.

39

S-ar putea să vă placă și