1. Prezentare Generală



Proiect SOA– Android Kit Kat –Profesor coordonator:Student:St?ncescu ?tefanBajura George AndreiMaster IISCContents TOC \o "1-3" \h \z \u 1. Prezentare General? PAGEREF _Toc376527756 \h 31.1 Scurt istoric PAGEREF _Toc376527757 \h 31.2 Caracteristici ale sistemului Android PAGEREF _Toc376527758 \h 41.3 SDK-ul oferit de Android PAGEREF _Toc376527759 \h 51.4 Versiuni Android PAGEREF _Toc376527760 \h 62. Arhitectura Android OS PAGEREF _Toc376527761 \h 72.1. Kernel, librarii PAGEREF _Toc376527762 \h 72.1.1 Linux Kernel 2.6 PAGEREF _Toc376527763 \h 112.2. Procese, fire de executie (threads) PAGEREF _Toc376527764 \h 162.2.1. Executia proceselor PAGEREF _Toc376527765 \h 162.2.2 Realizarea firelor de executie(threads) PAGEREF _Toc376527766 \h 182.3 Modalitatea de stocare a datelor PAGEREF _Toc376527767 \h 192.3.1 Baza de date PAGEREF _Toc376527768 \h 202.3.2 Tipuri de fisiere si preferences PAGEREF _Toc376527769 \h 202.3.3 Network PAGEREF _Toc376527770 \h 203. Avantajele/Imbunatatirile aduse de noua versiune PAGEREF _Toc376527771 \h 213.1. Diminuarea cerintelor hardware PAGEREF _Toc376527772 \h 213.2 Noi capabilitati NFC prin intermediul HCE (host card emulation) PAGEREF _Toc376527773 \h 213.3 Framework pentru imprimare PAGEREF _Toc376527774 \h 223.4 Framework pentru accesul la mediile de stocare PAGEREF _Toc376527775 \h 233.5 Senzori de joasa putere PAGEREF _Toc376527776 \h 233.5.1 Gruparea senzorilor PAGEREF _Toc376527777 \h 233.5.2 Detectia si contorizarea pasilor PAGEREF _Toc376527778 \h 243.6 Noi capabilitati media PAGEREF _Toc376527779 \h 243.6.1 Inregistrarea continutului afisat pe ecran PAGEREF _Toc376527780 \h 243.6.2 Monitorizare audio PAGEREF _Toc376527781 \h 243.7 Capacitati de randare imbunatatite PAGEREF _Toc376527782 \h 253.7.1 ?mbun?t??iri de performan?? (live) PAGEREF _Toc376527783 \h 253.7.2 Accelerarea GPU PAGEREF _Toc376527784 \h 25Bibliografie PAGEREF _Toc376527785 \h 261. Prezentare General?1.1 Scurt istoricAndroid este o platform? software ?i un sistem de operare pentru dispozitive ?i telefoane mobile bazat? pe nucleul Linux, dezvoltat? ini?ial de Google, iar mai t?rziu de consor?iul comercial Open Handset Alliance. Android permite dezvoltatorilor s? scrie cod gestionat ?n limbajul Java, control?nd dispozitivul prin intermediul API-ului dezvoltat de Google.Lansarea platformei Android la 5 noiembrie 2007 a fost anun?at? prin fondarea Open Handset Alliance, un consor?iu de 48 de companii de hardware, software ?i de telecomunica?ii, consacrat dezvolt?rii de standarde deschise pentru dispozitive mobile. Google a lansat cea mai mare parte a codului Android sub licen?a Apache, o licen?? de tip free-software ?i open source. La 5 noiembrie 2007 a fost f?cut public Open Handset Alliance, un consor?iu incluz?nd Google, HTC, Intel, Motorola, Qualcomm, T-Mobile, Sprint Nextel ?i Nvidia, cu scopul de a dezvolta standarde deschise pentru dispozitive mobile. Odat? cu formarea Open Handset Alliance, OHA a dezv?luit de asemenea primul s?u produs, Android, o platform? pentru dispozitive mobile construit? pe nucleul Linux, versiunea 2.6. La 9 decembrie 2008, a fost anun?at c? 14 noi membri au aderat la proiectul Android, incluz?nd: Sony Ericsson, Vodafone Group Plc, ARM Holdings Plc, Asustek Computer Inc, Toshiba Corp ?i Garmin Ltd.?ncep?nd cu 21 octombrie 2008, Android a fost disponibil ca Open Source. Google a deschis ?ntregul cod surs? (inclusiv suportul pentru re?ea ?i telefonie), care anterior era indisponibil, sub licen?a Apache. Sub licen?a Apache produc?torii sunt liberi s? adauge extensii proprietare, f?r? a le face disponibile comunit??ii open source. ?n timp ce contribu?iile Google la aceast? platform? se a?teapt? s? r?m?n? open source, num?rul versiunilor derivate ar putea exploda, folosind o varietate de licen?e. Fiind un sistem de operare open source foarte flexibil si permisiv, ofera posibilitatea unei distributii libere si totodata, a imbunatatirii lui , atat de catre utilizatori de telefoane mobile inteligente, cat si de producatorii de astfel de device-uri(tablete, smartphone-uri).Acesti factori au permis ca Android sa devina una dintre cele mai utilizate platforme astazi, de catre smartphone-uri, fiind una dintre alegerile preferate in ceea ce priveste software-ul, de companiile ce au nevoie de un sistem de operare low-cost , customizabil, si usor de folosit pentru dispozitivele high-tech pe care acestea le dezvolt?. Ca rezultat, ?n ciuda faptului c? a fost proiectat c? ?n primul r?nd pentru telefoane ?i tablete , au fost dezvoltate aplica?ii suplimentare pe televizoare, console de jocuri ?i alte electronice. Caracterul deschis al Android-ului a ?ncurajat o mare comunitate de dezvoltatori sa utilizeze codul surs? pentru a dezvolta proiecte, la care se adauga noi caracteristici pentru utilizatorii avansa?i sau sa utilizeze Android pe dispozitive care au beneficiat initial de alte sisteme de operare. [1]1.2 Caracteristici ale sistemului AndroidConfigura?ii dispozitive: Platforma este adaptabil? la configura?ii mai mari, VGA, biblioteci grafice 2D, biblioteci grafice 3D bazate pe specifica?ia OpenGL ES 1.0 ?i configura?ii tradi?ionale smartphone. Stocare de date Software-ul de baze de date SQLite este utilizat ?n scopul stoc?rii datelor Conectivitate Android suport? tehnologii de conectivitate incluz?nd GSM/EDGE, CDMA, EV-DO, UMTS, Bluetooth ?i Wi-Fi. Mesagerie instant SMS ?i MMS sunt formele de mesagerie instant disponibile, inclusiv conversa?ii de mesaje text. Navigatorul de web Navigatorul de web disponibil ?n Android este bazat pe platforma de aplica?ii open source WebKit. Ma?ina virtual? Dalvik Software-ul scris ?n Java poate fi compilat ?n cod ma?in? Dalvik ?i executat de ma?ina virtual? Dalvik, care este o implementare specializat? de ma?in? virtual? conceput? pentru utilizarea ?n dispozitivele mobile, de?i teoretic nu este o Ma?in? Virtual? Java standard. Suport media Android accept? urm?toarele formate media audio/video/imagine: MPEG-4, H.264, MP3, AAC, OGG, AMR, JPEG, PNG, GIF. Suport hardware adi?ional Android poate utiliza camere video/foto, touchscreen, GPS, accelerometru, ?i grafic? accelerat? 3D. Mediu de dezvoltare Include un emulator de dispozitive, unelte de depanare, profilare de memorie ?i de performan??, un plug-in pentru mediul de dezvoltare Eclipse. Pia?a Android Similar cu App Store-ul de pe iPhone, Pia?a Android este un catalog de aplica?ii care pot fi desc?rcate ?i instalate pe hardware-ul ?int? prin comunica?ie f?r? fir, f?r? a se utiliza un PC. Ini?ial au fost acceptate doar aplica?ii gratuite. Aplica?ii contra cost sunt disponibile pe Pia?a Android ?ncep?nd cu 19 februarie 2009 Multi-touch Android are suport nativ pentru multi-touch, dar aceast? func?ionalitate este dezactivat? (posibil pentru a se evita ?nc?lcarea brevetelor Apple pe tehnologia touch-screen).O modificare neoficial?, care permite multi-touch a fost dezvoltat? 1.3 SDK-ul oferit de AndroidSDK-ul Android include un set complet de instrumente de dezvoltare. Acestea includ un program de depanare, biblioteci, un emulator de dispozitiv , documenta?ie, mostre de cod ?i tutoriale. Platformele de dezvoltare sprijinite ?n prezent includ calculatoare bazate pe x86 care ruleaz? Linux (orice distribu?ie Linux desktop modern?), Mac OS X 10.4.8 sau mai recent, Windows XP ,Vista, 7 sau 8. Cerin?ele includ, de asemenea, Java Development Kit, Apache Ant, ?i Python 2.2 sau o versiune ulterioar?. Mediul de dezvoltare (IDE) suportat oficial este Eclipse (3.2 sau mai recent), utiliz?nd plug-in-ul Android Development Tools (ADT), de?i dezvoltatorii pot folosi orice editor de text pentru a edita fi?iere XML ?i Java ?i apoi s? utilizeze unelte din linia de comand? pentru a crea, s? construi ?i depana aplica?ii Android. La 18 august 2008, a fost lansat Android SDK 0.9 beta. Aceast? versiune ofer? un API actualizat? ?i extins?, instrumente de dezvoltare ?mbun?t??ite ?i un design actualizat pentru ecranul de baz?. Instruc?iuni detaliate pentru actualizare sunt disponibile pentru cei care lucreaz? deja cu o versiune anterioar?. La 23 septembrie 2008 a fost lansat SDK-ul Android 1.0 . Conform documenta?iei de lansare, includea "?n principal remedii pentru probleme, de?i au fost adaugate unele capabilit??i mai pu?in semnificative". Includea, de asemenea, c?teva modific?ri ale API-ului fa?? de versiunea 0.9. 5 Pe 9 martie 2009, Google a lansat versiunea 1.1 pentru telefonul Android Dev. De?i exist? c?teva actualiz?ri estetice, c?teva actualiz?ri cruciale includ suport pentru "c?utare prin voce, aplica?ii contra cost, remedii pentru ceasul cu alarm?, remediu pentru blocarea la trimiterea gmail, notific?ri de po?t? electronic? ?i intervale de ?mprosp?tare, iar acum hartile afi?eaz? evalu?ri de firme". Un alt update important este c? telefoanele Dev pot acum accesa aplica?ii pl?tite ?i dezvoltatorii le pot vedea acum pe Pia?a Android.1.4 Versiuni AndroidVersiunile Android in ordine cronologica invers?: VersiunePseudonimData lansariiNivel APIRata de utilizare4.4KitKatOctober 31, 2013191.1%4.3.xJelly BeanJuly 24, 2013184.2%4.2.xNovember 13, 20121712.9%4.1.xJuly 9, 20121637.4%4.0.3–4.0.4Ice Cream SandwichDecember 16, 20111518.6%3.2HoneycombJuly 15, 2011130.1%2.3.3–2.3.7GingerbreadFebruary 9, 20111024.1%2.2FroyoMay 20, 201081.6%2. Arhitectura Android OS2.1. Kernel, librariiArhitectura Android poate fi observata in figura urmatoare: Cand vorbim de arhitectura Android OS , ne gandim la faptul ca acest sistem de operare este o stiva software de layere(straturi),unde fiecare layer este un grup alcatuit din mai multe componente de program.Pentru a intelege mai bine aceasta arhitectura,ea trebuie parcursa de la baza catre varf.[2] Practic,arhitecura cuprinde urmatoarele straturi: Applications layer(aplica?ii scrise ?n Java, executate ?n Dalvik) Framework services and libraries layer(scris cea mai mare parte ?n Java) Applications and most framework code executed in a virtual machine layer Native libraries, daemons and services layer(scrise ?n C sau C + +) Kernel-ul Linux, care include drivere pentru hardware, retea, accesul la de fi?ierul de sistem ?i comunicarea inter-proces.[2]Kernel Android const? dintr-un strat ce are ca baza kernel-ul Linux 2.6 ?i Linux Kernel 3.x ( pt varianta Android 4.0 ), cu middleware, biblioteci ?i API-uri scrise ?n C ?i aplica?ii software ce ruleaz? pe un application framework, care include biblioteci Java bazate pe Apache Harmony. ?ntregul sistem de operare Android este construit deasupra stratului de bazaLinux Kernel 2.6, cu unele modific?ri suplimentare arhitecturale efectuate de c?tre Google.[3] Nucleul Linux include multitasking real, memorie virtual?, biblioteci partajate, demand loading, executabile partajate copy-on-write, gestiunea memoriei corect?, ?i re?ele TCP/IP. Ast?zi, Linux este un nucleu monolitic cu ?nc?rcare de module. Device drivere ?i extensii de nucleu ruleaz? tipic ?n inelul 0, cu acces total la hardware, de?i unele ruleaz? ?n spa?iul utilizator. Spre deosebire de nucleele monolitice standard, device driver-ele se configureaz? u?or ca module, ?i se ?ncarc? sau se descarc? ?n timpul rul?rii sistemului. Tot spre deosebire de nucleele monolitice standard, device driver-ele pot fi pre-empted ?n anumite condi?ii. Acest din urm? feature a fost ad?ugat pentru a trata ?ntreruperile hardware corect, ?i pentru a ?mbun?t??i suportul pentru multiprocesare simetric?. Procesul de pre-empty amelioreaz? laten?a, cresc?nd viteza de r?spuns ?i f?c?nd Linux mai potrivit pentru aplica?ii de timp real.[3] Acest OS folose?te ma?ina virtual? Dalvik ce beneficiaza de compilator just-in-time, pentru a rula Dalvik DEX-cod (Dalvik executabil), care este de obicei tradus din Java bytecode.[3] Principala platforma hardware utilizata de Android este arhitectura ARM. Cea mai noua varianta 3.3 este prezenta pe device-urile ce folosesc Android 4.0, respectiv 4.1, kernelul fiind imbunatatit in principal pentru bug-fixing.Cele mai importante schimbari fata de versiunile anterioare sunt: Btrfs Suport pentru restriping ?ntre diferite niveluri RAID, echilibrarea ?mbun?t??it? ?i instrumente de depanare. Open vSwitch Implementarea avansata a unui switch de re?ea, cu suport specializat complet, pentru mediul virtual. Teaming network interface Inlocuirea bonding-driverului, ce ofer? conexiune de re?ea rapid? ?i stabil?. Byte Queue Limits and Per-cgroup TCP buffer limits Limitele configurabile pentru buffere pentru a preveni problemele de laten?? excesive. Network priority control group Interfata Administrator pentru stabilirea priorit??ii traficului in aplica?ii. Enhanced ext4 online resizing Redimensionarea Ioctl mai rapid? ?i mai flexibil?, astefl incat Kernelul poate efectua toate activit??ile de resizing. Support for Texas Instruments C6X architecture Suport pentru cele mai recente multi-core-uri DSP Texas Instruments. EFI boot support Stub-ul de boot poate fi acum executate direct de c?tre EFI firmware-ul. Librarii In materie de librarii, Android include un set de biblioteci C / C + + utilizate de diferitele componente ale sistemului. Acestea sunt expuse dezvoltatorilor prin intermediul application framework-ului.Acest layer(al librariilor) permite device-ului echipat cu Android OS sa lucreze cu diferite tipuri de date. Cele mai inportante librarii sunt: ? System C library - BSD-derivata din standardul C(libc) ,a fost imbunatatita pentru embedded Linux-based devices ? Media Libraries – bazata pe PacketVideo's OpenCORE; librariile suporta playback si inregistrarea formatelor audio si videa cunoscute,dar si a formatelor de imagine, incluzand MPEG4, H.264, MP3, AAC, AMR, JPG, and PNG ? Surface Manager - gestioneaz? accesul la subsistemul de afi?are ?i straturile 2D ?i 3D din mai multe aplica?ii ? LibWebCore – un engine web browser modern,ce aduce impreuna Android browser si embeddable web view ? SGL – engine pentru support grafic 2D ? 3D libraries – implementare bazata pe OpenGL ES 1.0 APIs; librariile fie utilizeaza hardware 3D acceleration,fie 3D software rasterizer ? FreeType - bitmap si vector de redare font ? SQLite- un motor de baze de date rela?ionale disponibil pentru toate aplica?iile 2.1.1 Linux Kernel 2.6In martie 2001, si mai apoi, in iunie 2002, dezvoltatorii core-ului kernel s-a reunit la Summit-ul Kernel. Scopul principal al Kernel-ului 2.5 era sa faca update-ul layer-ului block (layer responsabil de dispozitivele bloc, precum hard-drive-urile). Alte teme aduse in discutie au fost: scalabilitatea, raspunsul sistemului si memoria virtuala. Lista update-urilor este urmatoarea:Organizator O(1)Kernel preventivImbunatatiri ale timpului de raspunsRedesign-ul layer-ului blocImbunatatirea subsistemului `memorie virtuala`Imbunatatirea suportului firelor de executieLayer de sunet anizatorul O(1)Organizatorul de procese este subsistemul kernelului responsabil cu alocarea timpului de procesor. El este cel care decide ce proces este rulat, si cand. De multe ori, aceasta nu este o sarcina usoara. Acesta trebuie sa se asigura ca din toata lista proceselor, cel mai important va fi mereu cel care ruleaza. Imbunatatirile ce se doreau a fi aduse aduse la nivelul organizatorului au fost urmatoarele:Organizare O(1) completa. Fiecare algoritm din cadrul organizatorului ar trebuie sa se execute intr-o perioada de timp constanta, indiferent de numarul de procese care ruleaza.Scalabilitate SMP perfecta. Ideal ar fi ca fiecare procesor ar trebuie sa aiba propria lista de procese rulabile din care organizatorul sa aleaga (runque).Imbunatatirea afinitatii SMP. Ar trebui sa tinda natural sa grupeze task-urile pe un CPU anume si sa le ruleze acolo. Migrarea task-urilor de la un CPU la altul ar trebui sa fie facuta doar in cazul rezolvarii unor distributii neuniforme in ceea ce priveste lungimea listelor runque.Noul organizator respecta cerintele descrise mai sus. Prima cerinta, organizarea O(1) completa se refera timpul de procesare al algoritmului folosit pentru selectia task-ului primordial. Indiferent de dimensiunea listei de procese eligibile pentru a rulare, timpul in care acest algoritm este rulat trebuie sa fie mereu acelasi (constant). In vechiul organizator, algoritmul putea fi sintetizat astfel:for (each runnable process on the system) { find worthiness of this process if (this is the worthiest process yet) { remember it }}run the most worthy processIn noua varianta, este verificata eligibilitatea fiecarui proces. Asta presupune ca algoritmul sa cicleze de n ori pentru n procese. Mai mult, acesta este un algoritm de ordin O(n) – scaleaza linear cu numarul proceselor. Acesta ar putea fi descris de urmatoarea secventa de pseudocod:get the highest priority level that has processesget first process in the list at that priority levelrun this processO alta imbunatatire adusa de noul organiator este accesul rapid la cel mai prioritar proces si la primult proces din lista. Acesta tine o tabela cu toate aceste procese, putand astfel doar sa selecteze procesul dorit, fata de a-l cauta, cum facea pana la 2.6.A doua cerinta se refera la scalabilitatea perfecta SMP. Asta implica ca , in cazul in case se adauga procesoare la un sistem dat, performantele organizatorului la nivel de procesor raman neschimbate. Acest lucru nu era valabil in vechea versiune, odata cu cresterea numarului de procesoare, scazand performantele organizatorului per procesor. Exista un overhead considerabil dat de acest update, tocmai pentru asta introducandu-se un blocaj pe fiecare runque, la un moment dat, doar un singur procesor putand avea acces concurent la organizator.Noul organizator imparte lista ‘runque’ globala in liste individuale per procesor.Fig 1. Runqueue 2.4Runqueue 2.5/2.6Kernel preventivActualizarea este valabila de la versiunea 2.5.4. Pana la acest moment, procesele se executau consecutiv. Aceasta modificarea ridica probleme de securitate la nivelul datelor impartasite de procese. Sistemul SMP (multiprocesare simetrica) se ocupa de acesta problema de securitate. Mecanismele folosite de acest sistem pentru protectia in conditii de multiprocesare simetrica, au fost usor de adaptat pentru a oferi securitate in contextul unui kernel preventiv.Imbunatatiri ale timpului de raspunsKernelul preventiv atrage dupa sine imbunatatirea timpului de raspuns, sistemul putand detecta acu urmatorul `bottleneck`. Dezvoltatorii si-au concentrat atentia asupra algoritmilor in ideea micsorarii latentei. Pentru asta, au avut in vedere memoria virtuala(VM - `virtual memory`) si sistemul de fisiere virtual (VFS - `virtual file system`), si, consecutiv, reducand durata de `lock`.Redesign al layer-ului blocIncepand cu versiunea 2.5.1, cea mai importanta modificare a constat in creearea unei structuri generice si flexibile pentru a reprezenta request-urile bloc I/O, eliminarea bufferelor de bounce si suportul I/O direct in memoria inalta, transformand lock-ul io_request_lock per queue, si realizarea unui nou organizator I/O.Pana la versiunea 2.5, layerul bloc folosea o structura `buffer-head` pentru reprezentarea request-urilor I/O. Aceasta metoda era ineficienta din multiple motive, principalul fiind cel ca layer-ul bloc trebuia sa divida structurile de date in bucati mai mici , doar pentru a le reconstrui mai apoi in organizatorul I/O. In versiunea 2.5, kernel-ul foloseste o structura de date noua, struct `bio`, pentru repprezentarea request-urilor I/O. Aceasta este o structura simplificata, potrivita pentru request-urile I/O raw dau din buffer, lucreaza cu memoria inalta iar datele pot fi impartite si reconstruite cu usurinta. Rezulta un cod mai curat si mai eficient.In aceasta versiune a kernel-ului s-a renuntat la hop-ul extra necesar pana acum (low memory) pentru transferul datelor de pe un dispozitiv de tip bloc in memoria de nivel inalt.Fig. 2 Hop-ul intermediar(low memory) pentru accesul datelor de pe dispozitivele de tip bloc(buffer-ul bounce)S-a trecut de la lista globala de procese la liste individuale de procese per procesor, fiecare lista cu lock-ul ei.Fig 3. Kernel-ul 2.5 introduce un lock per lista de request-uri (in asteptare)O imbunatatire majora este structura cozii de request-uri,structura arbore, fata de structura lineara, folosita pana la versiunea 2.5, imbunatatind astfel timpul de raspuns al sistemului.Subsistemul VM(virtual memory) imbunatatit Pana la aceasta versiune, mereu au existat probleme legate de managementul memoriei virtuale. In versiunea 2.6 apar trei schimbari majore:Mapare inversa a VM (rmap)Redesign al algoritmilor – mai simplii si mai inteligentiIntegrare stransa cu layer-ul VFSAceste schimbari au dus la imbunatatirea performantelor in majoritatea cazurilor. In continuare vom analiza fiecare din cele trei schimbari majore.Fiecare sistem de memorie virtuala contine atat adrese fizice (adresele paginilor din cipurile RAM) si adrese virtuale (adresele virtuale disponibile aplicatiilor). Arhitecturile cu unitate de management al memoriei (MMU) permit un lookup convenabil al adresei fizice pornind de la adresa virtuala. Acest lucru este de dorit deoarece aplicatiile acceseaza memoria virtuala in mod constant, sistemul trebuind sa faca conversia din adresa virtuala in cea fizica. Accesul invers (de la cea fizica la virtuala) nu este la fel de facil. Pentru asta, kernel-ul trebuie sa scaneze fiecare pagina a memoriei fizice si sa caute adresa dorita, un proces mare consumator de timp. O mapare inversa a memoriei virtuale ofera o lista de corespondente intre adresa virtuala si cea fizica. Cu alte cuvinte, in loc dememoria virtuala cu rmap trebuie doar sa caute in lista corespondenta dorita. Acesta este un proces mult mai rapid, acest lucru putand fi observat mai ales cand memoria virtuala este foarte solicitata. In figura 4 se poate observa acest proces de rmap.Fig.4 Maparea inversa face legatura intre o pagina din memoria fizica si una sau mai multe pagini din memoria virtuala.In continuare, algoritmii au fost reproiectati astfel incat sa fie simplificati si mai stabili. In final, integrarea intre VM si VFS a fost mult imbunatatita. Metodele `write-back` si `read-ahead` pentru fisiere si pagini, impreuna cu management-ul buffer-ului au fost simplificate. `bdflush kernel thred` a fost inlocuit de `pdflush`. Noile fire de executie (thred) sunt capabile de o mai buna saturatie a discului.[5]2.2. Procese, fire de executie (threads)2.2.1. Executia proceselor Executia unei componente anume a unei aplicatii, este controlata de fisierul manifest.Elementele componente — <activity>, <service>, <receiver>, and <provider> au cate un atribut de proces care specifica procesul in cazul in care o componenta a aplicatiei trebuie sa ruleze. Aceste atribute pot fi setate astfel ?nc?t fiecare component? se fie executat? ?n propriul proces, sau mai multe componente sa imparta acelasi proces.Pot fi de asemenea setate astfel incat aceleasi componente sa ruleze in acelasi process, dar pentru aplicatii diferite. Elementul <application> de exemplu, are un atribut de proces, ce stabileste o valoare implicit? aplicabila tutror componentelor. Toate componentele sunt instan?iate ?n firul principal al procesului specificat, ?i apelurile de sistemului pentru acea component? sunt expediate de la aceast thread. Nu sunt create threaduri separate pentru fiecare instan??. ?n consecin??, metodele care r?spund la aceste apeluri - metode, cum ar fi View.onKeyDown ce raporteaza ac?iunile utilizatorului si notific?rile despre ciclul de via?? se execut? ?ntotdeauna ?n firul principal al procesului.[4] Sistemul de operare poate sa decida oprirea unui proces la un moment dat, atunci cand memoria este scazuta si ceruta de alte procese vitale pentru utilizator.Astfel, un proces este reluat in momentul in care, este nevoie din nou de anumite componete ale aplicatiei. Inainte de a decide ce proces sa opreasca, Android ia in calcul ce proces este mai important pentru utilizator, astfel ca , este mai usor sa inchida un proces care nu e vizibil pe ecran , decat unul existent acolo.Sistemul Android ?ncearc? s? men?in? un proces pentru o anumita aplicatie cat mai mult timp posibil, dar elimina procesele aflate prea mult timp in executie , recuperand astfel memoria pentru procese noi sau pentru procesele mai importante. Pentru a determina ce procese sa p?streze in executie, si pe care sa le opreasca, sistemul de operare face o ierarhizare a lor, in functie de compenentele implicate in process si de starea acestora. Astfel, procesele cu cea mai mica importan?? sunt eliminate primele, apoi cele cu urm?toarea in ordinea importantei, ?i a?a mai departe, dup? cum este necesar , pentru a recupera resursele sistemului.Exista o ierarhie a importantei proceselor pe 5 niveluri: Foreground process: Un proces aflat in derulare pentru o aplicatie curenta.Acesta e considerat va fiind in foreground daca indeplineste una din urmatoarele conditii: -gazduieste o Activity cu care userul interactioneaza; -gazduieste un Service legat de Activity-ul cu care interactioneaza userul; -gazduieste un Service care ruleaza in foreground-acest serviciu este apelat prin metoda startForeground() ; -gazduieste un Service care executa una dintre lifecycle callbacks (onCreate(), onStart(), sau onDestroy()). -Gazduieste un BroadcastReceiver executat prin metoda onReceive()Visible Proces Un proces care nu are nici o componenta in foreground, dar poate afecta ceea ce utilizatorul vede pe ecran. Un proces este considerat a fi vizibil daca oricare dintre urmatoarele condi?ii sunt adevarate:- g?zduie?te o Activity care nu se afl? ?n foreground, dar este ?nc? vizibila pentru utilizator (apelata de metoda onPause () ). Acest lucru s-ar putea s? apar?, de exemplu, ?n cazul ?n care activitatea de foreground a ?nceput un dialog, care permite ca activitatea anterioar? sa fie v?zuta ?n spatele ei. - g?zduie?te un Service care este legat in foreground de Activity. Un proces vizibil este considerat extrem de important ?i nu va fi oprit decat dac? acest lucru este necesar pentru a men?ine toate procesele din foreground in executie.Service process Este un proces ce execut? un serviciu care a fost apelat cu metoda Startservice () ?i nu se ?ncadreaz? ?n nici una dintre cele dou? categorii superioare. De?i procesele de servicii nu sunt direct legate cu orice vede utilizatorul acestea realizeaza ?n general, lucruri de care utilizatorul este interesat (cum ar fi redarea de muzic? ?n fundal sau desc?rcarea de date pe re?ea), astfel ?nc?t sistemul le p?streaz? ?n func?iune cu excep?ia cazului ?n care nu exista suficient? memorie pentru a le men?ine ?mpreun? cu toate informa?iile generate de procesele vizibile si cele de foreground .Background process Un proces ce de?ine o activitate care nu este vizibila pentru utilizator (apelata prin metoda onStop ()). Aceste procese au un impact direct asupra experien?ei utilizatorului, iar sistemul le poate opri in orice moment pentru a recupera memorie pentru procesele foreground, cele vizibile, sau procesul de servicii. De obicei, exist? mai multe procese de background in executie, astfel ca, acestea sunt p?strate ?ntr-o lista LRU (cel mai recent utilizate)pentru ca sistemul de operare sa se asigure c? procesul care a fost cel mai recent utilizat de user este ultimul care urmeaz? s? fie oprit. Dac? o activitate isi implementeaza metodele pentru lifecycle corect, ?i salveaz? starea curenta, oprirea procesului ei nu va avea un efect vizibil asupra experien?ei utilizatorului, pentru c? atunci c?nd utilizatorul navigheaz? ?napoi la activitate, aceasta isi restabile?te starea.Empty process Este un proces care nu de?ine componente active ale aplica?iei.Singurul motiv pentru a men?ine acest tip de proces ?n via?? este pentru scopuri de cache, pentru a imbunatati timpul de pornire data viitoare cand o component? trebuie s? ruleze.Sistemul opreste de multe ori aceste procese, ?n scopul de a echilibra resursele generale ale sistemului de cache ?ntre proces ?i cache-ul subadiacent al kernel-ului.2.2.2 Realizarea firelor de executie(threads)Desi exista posibilitatea rularii unui singur proces pentru o anumita aplicatie, la un moment dat, va exista in background un thread in executie pentru aplicatia respectiva.Tinand cont ca , pentru dispozitivele touch actuale este important ca interfata cu userul trebuie sa raspunda rapid la actiunile acestuia,threadul care gazduieste o anumita activitate, trebuie sa nu raspunda in acelasi timp si de o aplicatie consumatoare de timp , cum ar fi downloadul. De aceea, orice activitate de acest gen trebuie transferata catre un alt thread.[4] Threadurile sunt create in cod folosind standard Java Threads objects. Android ofer? o serie de clase pentru gestionarea firelor de executie - Looper pentru a rula o bucl? ?ntr-un thread,Handler –utilizat pentru prelucrarea mesajelor, ?i HandlerThread pentru ?nfiin?area unui thread, cu o bucl?.Metode pentru Thread-safe C?nd un apel la o metod? implementat? ?ntr-un obiect IBinder provine din acela?i proces ca ?i IBinder, metoda este executata ?n threadul apelantului. Totusi,atunci cand apelul provine de la un alt proces,metoda este executata intr-un thread ales dintr-un pool de threaduri pe care sistemul de operare il mentine in acelasi process cu IBinder, nefiind executat in firul principal al procesului.De exemplu,in timp ce metoda de servicii onBind() va fi apelata din threadul principal al procesului servicii,metodele implementate in obiectul pe care onBind() il returneaza vor fi apelate din threadurile existente in pool.Tinand cont ca un serviciu poate avea mai mult de un client, mai multe threaduri pot “angaja” aceeasi metoda IBinder in acelasi timp.Deci , aceste metode trebuie sa fie implementate astfel incat sa fie thread-safe.In mod similar,un content provider, poate primi cereri de date ce provin din procese diferite. Desi clasele ContentResolver si ContentProvider ascund detaliile despre cum interprocesul de comunicare este realizat, metodele content provider ce raspund la aceste cereri- metodele query(), insert(), delete(), update(), and getType() sunt apelate dintr-un pool de threaduri in procesul content providerului, nu in threadul principal.De asemenea, aceste metode trebuie sa fie implementate astfel incat sa fie thread-unicarea interproces Android ofer? un mecanism pentru inter-comunicare (IPC), folosind Remote Procedure Calls (RPC), ?n care o metod? este apelata de c?tre o activitate sau o component? a unei aplica?ii, dar executata la distan?? (?ntr-un alt proces), returnand orice rezultat ?napoi la apelant. Aceasta presupune descompunerea unei metode de apelare ?i a datelor sale la un nivel pe care sistemul de operare il poate ?n?elege, transmitand apelul de la procesul ?i spa?iul de adrese local la procesul ?i spa?iul de adrese de la distan?? , apoi reasambland apoi apelul acolo. Valorile returnate sunt apoi transmise ?n direc?ia opus?. Android ofer? tot codul pentru a efectua aceste opera?iuni IPC.Pentru a efectua IPC, cererea trebuie s? fie legata de un serviciu, folosind bindService ().2.3 Modalitatea de stocare a datelorComparativ cu alte sisteme de operare , Android OS are o modalitate diferita de stocare a datelor:fiecare tip de data, inclusiv fisierele, sunt destinate fiecarei aplicatii in parte. Beneficiaza totusi, si o modalitate prin care datele corespunzatoare unei aplicatii specifice pot si expuse si celorlalte aplicatii-prin intermediul content providerului. Un content provider este o component? op?ional? a unei aplicatii, care permite accesul pentru operatiile de citire/scriere pentru datele aplicatie datele aplica?iei. Content providerii implementeaza o sintaxa standard pentru solicitarea ?i modificarea datelor, precum ?i un mecanism standard pentru citirea datelor returnate. Android furnizeaz? un num?r de content provideri pentru tipurile de date standard, cum ar fi imagine, audio, ?i fi?iere video ?i informa?ii de contact personale. Indiferent dac? se doreste sau nu exportarea datele aplica?iei pentru alte aplicatii, este necesara o modalitate de stocare. Android ofer? urm?toarele patru mecanisme pentru stocarea ?i reg?sirea datelor: Preferences, Fi?iere, Baze de date, Network,Internal storage, external storage.2.3.1 Baza de dateAPI-ul Android contine suport pentru crearea ?i utilizarea bazelor de date SQLite. Fiecare baz? de date este asociata aplica?iei care o creeaz?.Obiectul SQLiteDatabase reprezint? o baz? de date ce contine metode pentru a interac?iona cu acesta - de interog?ri ?i gestionarea a datelor. Pentru crearea unei baza de date, se apeleaza rutina SQLiteDatabase.create () ?i, de asemenea, subclasa SQLiteOpenHelper.In ceea ce priveste suportul pentru sistemul de baze de date SQLite, Android dispune de func?ii de gestionare al bazei de date ce permit s? stocare de colec?ii complexe de date arhivate ?n obiecte. De exemplu, Android define?te un tip de date pentru informa?iile de contact; aceasta este alc?tuit? din mai multe campuri, inclusiv un nume ?i prenume (siruri de caractere), o adres? ?i numere de telefon (de asemenea, siruri de caractere), o fotografie (imagine bitmap), precum ?i alte informa?ii. Android permite navigarea in baza de baze de date cu ajutorul tool-ului SQLite3 , ce permite s? r?sfoi?i con?inutului, executarea de comenzi SQL, precum ?i alte func?ii utile privind bazele de date SQLite. Toate bazele de date, SQLite ?i altele, sunt stocate pe dispozitiv folosind pathul / date / date / nume_pachet / baze de date.[4]2.3.2 Tipuri de fisiere si preferencesCa modaliate de stocare, datele pot fi retinute direct pe dispozitivul mobil sau pe un dispozitiv removable. In mod implicit, alte aplica?ii nu pot accesa aceste fi?iere. Pentru a citi date dintr-un fi?ier, se apeleaza Context.openFileInput () ?i se trece numele ?i pathul fi?ierului. Returneaz? un obiect standard Java FileInputStream. Pentru a scrie ?ntr-un fi?ier, se apeleaza Context.openFileOutput () cu numele ?i pathul fisierului. Returneaz? un obiect FileOutputStream. Apelarea acestor metode nu func?ioneaza decat pentru fi?ierele locale.Preferences reprezinta un mecanism pentru a stoca ?i a prelua perechi de tipuri de date primitive de tip key-value. Acesta este de obicei folosit pentru a stoca preferin?ele in aplica?ii, cum ar fi un mesaj de salut implicit sau un font de text care urmeaz? s? fie ?nc?rcate atunci c?nd o aplicatie este pornita. Se poate apela Context.getSharedPreferences () pentru a citi ?i a scrie valori. Se pot atribui pentru setul de preferin?e, sau partaja cu alte componente ?n aceea?i aplica?ie, cu Activity.getPreferences .[4]2.3.3 Network Stocarea datelor pe web se poate face folosind network serverul propriu.Android ofera o modalitate de expunere a datelor private, altor aplicatii prin intermediul content providerului.Astfel, se poate folosi reteaua pentru a stoca si prelua date folosind propriile servicii web.Pentru a face operatiuni de retea se folosesc urmatoarele clase: .* , .*.[4]3. Avantajele/Imbunatatirile aduse de noua versiune3.1. Diminuarea cerintelor hardwareAndroid 4.4 este proiectat sa ruleze pe o gama mult mai larga de dispozitive mobile, cu capacitati harware reduse, chiar si pe dispozitive cu memorie de doar 512MB.Optimizari precum ajustari ale cache-ului codului ale lui Dalvik JIT, KSM (kernel samepage merging) sau trecerea de la swap la zRAM, toate au condus la un management al memoriei imbunatatit.In cadrul noii versiuni intalnim un control foarte strict al consumului de memorie. Astfel in cazul in care mai multe servicii trebuie sa porneasca in acelasi timp (ex: cazul in care dispozitivul mobil se conecteaza la o alta retea), Android lanseaza in executie pachete de servicii, in serie si nu toate odata, in paralel, pentru a evita peak-uri de cerere de memorie.Tot in acest sens, a fost introdus un nou API, ActivityManager.isLowRamDevice(), ce permite dezvoltatorilor sa programeze un comportament al aplicatiei in functie de resursele harware ale dispozitivului. Au fost introduse noi ustensile pentru analiza traficului la nivel de memorie, procstats tool, meminfo tool.3.2 Noi capabilitati NFC prin intermediul HCE (host card emulation)3640455197485Android 4.4 introduce noua platform? de suport pentru tranzac?ii securizate pe baz? de NFC prin Emulare Card Gazd? (HCE – host card emulation), pentru pl??i, programe de loialitate, carduri de acces, permise de trecere, si alte servicii personalizate. Cu HCE, orice aplicatie de pe un dispozitiv Android poate emula un smart card NFC, permi??nd utilizatorilor ca prin atingere sa ini?ieze tranzac?ii cu o aplica?ie la alegerea lor – nefiind nevoie de nici un element de siguranta (SE) ?n dispozitiv. Aplicatiile pot utiliza, de asemenea, un nou Mod Reader pentru a ac?iona ca cititoare de carduri HCE ?i alte tranzac?ii bazate pe NFC.HCE Android emuleaz? carduri inteligente bazate pe protocolul ISO / IEC 7816, care utilizeaz? protocol de transmisie contactless ISO / IEC 14443-4 (ISO-DEP). Aceste carduri sunt utilizate de mai multe sisteme de ast?zi, inclusiv de infrastructura de plat? EMVCO NFC existente. Android folose?te identificatoare de aplicatii (AIDs), asa cum sunt definite ?n ISO / IEC 7816-4 ca baz? pentru rutare a tranzac?iilor catre aplica?iile Android corecte.Aplicatiile declara AID-urile ?n fi?ierele lor manifest, ?mpreun? cu un identificator de categorie care indic? tipul de suport disponibil (de exemplu, "pl??i"). ?n cazurile ?n care mai multe aplica?ii accept? acela?i AID ?n aceea?i categorie, Android afi?eaz? un fereastra dialog care permite utilizatorului s? aleag? care aplicatia pe care doreste sa o utilizeze.Atunci c?nd utilizatorul apasa s? pl?teasc? la un terminal POS, sistemul extrage AID dorit ?i ruteaza tranzac?ia la aplicarea corect?. Aplica?ia cite?te datele tranzac?iei ?i poate folosi orice servicii locale sau din re?ea pentru a verifica ?i apoi finaliza tranzac?ia.HCE Android necesit? un controler NFC ?n dispozitiv. Suport pentru HCE este deja disponibil pe scar? larg? ?n cele mai multe controlere NFC, care ofer? suport dinamic, at?t pentru HCE ?i tranzac?iile SE. Dispozitivele Android 4.4 care accept? NFC vor include si `Tap & Pay` pentru plati facile, folosind HCE.3.3 Framework pentru imprimareAplica?iile Android au acum posibilitatea de a imprima orice tip de con?inut prin Wi-Fi sau de servicii g?zduite-cloud, cum ar fi Google Cloud Print. ?n aplica?ii ce au activata optiunea de imprimare, utilizatorii pot descoperi imprimantele disponibile, schimba dimensiuni de h?rtie, alege anumite pagini pentru a imprima, ?i imprima aproape orice tip de document, imagine, sau un fi?ier.24853901497965Android 4.4 introduce suport nativ pentru imprimare, ?mpreun? cu API-uri pentru gestionarea imprimarii ?i ad?ugarea de noi tipuri de suport de imprimant?. Platforma ofer? un manager de imprimare care mediaz? ?ntre aplica?iile ce solicita imprimare ?i servicii de tip?rire instalate care se ocupa de cererile de imprimare.Managerul de imprimare ofer? servicii partajate ?i un sistem UI(interfata utilizator) pentru imprimare, oferind utilizatorilor un control constant ?n imprimarea de pe orice aplicatie. Managerul de imprimare asigur?, de asemenea, securitatea de con?inut, deoarece a trecut peste procese, de la o aplica?ie la un serviciu de imprimare.Produc?torii de imprimante pot folosi noi API-uri pentru dezvoltarea de servicii de imprimare proprii - componente conectabile care se adaug? servicii specifice furnizorului, pentru comunicarea cu anumite tipuri de imprimante. Producatorii pot construi servicii de imprimare ?i le pot distribui prin Google Play, oferind un acces facil pentru utilizatori s? g?seasc? ?i s? le instaleze pe dispozitivele lor. Aplica?iile destinate clientilor pot utiliza noi API-uri pentru a ad?uga capacit??i de imprimare ?n aplica?iile lor, cu modific?ri minime de cod. ?n cele mai multe cazuri, trebuie s? ad?uga?i o ac?iune de imprimare in Action Bar ?i o interfa?? pentru a alegerea elementului destinat imprimarii.Pentru o mai larga compatibilitate, Android folose?te PDF ca format de fi?ier primar pentru imprimare. ?nainte de imprimare, aplica?ia trebuie sa genereze o versiune PDF paginata a con?inutului de imprimat. Pentru comoditate, API-ul de imprimare ofer? clase helper native ?i WebView pentru a v? permite s? crea?i PDF-uri care folosesc API-uri de desen standard Android. Dac? aplica?ia utilizatorului ?tie cum s? deseneze con?inutul, se poate crea rapid un PDF pentru tip?rire.Cele mai multe dispozitive care ruleaz? Android 4.4 vor include Google Cloud Print pre-instalat ca un serviciu de imprimare, precum ?i mai multe aplica?ii Google care accept? imprimarea, inclusiv Chrome, Drive, Gallery, ?i QuickOffice.3.4 Framework pentru accesul la mediile de stocare32404059880604760595988060 Un nou framework pentru accesul la mediile de stocare face ofera utilizatorilor o navigare si deschidere facila pentru document, imagini ?i alte fi?iere de pe toate lor de mediile lor de stocare preferate. O interfata UI standard, u?or de utilizat, permite utilizatorilor cautarea si accesarea fi?iere recente ?ntr-un mod consecvent ?n aplica?ii ?i furnizori.Cloud sau de servicii de stocare locale pot participa la acest ecosistem prin implementarea unui noi clase `furnizor de documente` care ?ncapsuleaz? serviciile lor. Clasa furnizor include toate API-urile necesare pentru ?nregistrarea furnizorului cu sistemul ?i de a gestiona navigarea, citirea, precum ?i scrierea documentelor. Furnizorul de document poate oferi utilizatorilor acces la orice date de la distan?? sau local, care pot fi reprezentate ca fi?iere - de la text, fotografii ?i imagini de fundal pentru video, audio, ?i nu numai.3.5 Senzori de joasa putere3.5.1 Gruparea senzorilorAndroid 4.4 introduce suport pentru gruparea senzorilor hardware, un nou de optimizare , care poate reduce semnificativ consumul de energie consumat? de senzori in cadrul activit??ilor ?n curs de desf??urare .Prin gruparea senzorilor, Android lucreaz? cu hardware-ul dispozitivului pentru a colecta ?i livra evenimente senzor eficient ?n loturi , mai degrab? dec?t individual, pe masura ce acestea sunt detectate . Acest lucru permite procesorului aplica?iei s? r?m?n? ?ntr-o stare de repaus (implica consum redus de putere) p?n? ce loturile sunt livrate . Se pot solicita evenimente grupate de la orice senzor folosind un ascult?tor standard de eveniment, ?i pute?i controla intervalul la care ve?i primi loturile . Pute?i solicita , de asemenea, livrare imediata a evenimentelor ?ntre ciclurile de lot uri.Gruparea senzorilor este ideala pentru un consum redus de energie , utilizare de lung? durat?, cum ar fi sala de fitness , localizare , monitorizare , ?i altele. 3.5.2 Detectia si contorizarea pasilor50069751003303516630100330Android 4.4 de asemenea, adaug? suport pentru doi senzori noi - detector pas ?i contor pas - care permit aplicatiei sa inregistreze activitatea utilizatorului - mersul pe jos, alergatul, sau urcatul scarilor. Acesti noi senzori sunt implementati pentru un consum redus de energie.Detectorul pas analizeaz? intrare accelerometru pentru a recunoa?te atunci c?nd utilizatorul a f?cut un pas, apoi declan?eaz? un eveniment cu fiecare pas. Contorul pas urm?re?te num?rul total de pasi de la ultima repornire a dispozitivului ?i declan?eaz? un eveniment cu fiecare schimbare a num?rului de pasi. 3.6 Noi capabilitati media3.6.1 Inregistrarea continutului afisat pe ecranAndroid 4.4 adauga suport pentru ?nregistrare ecranului ?i ofer? un utilitar de ?nregistrare ecran care v? permite pornirea/oprirea ?nregistrarii pe un dispozitiv care este conectat la mediul dumneavoastr? Android SDK pe USB . Este o modalitate foarte bun? de a crea walkthroughs ?i tutoriale pentru aplica?ia dvs. , materialele de testare , clipuri video de marketing , ?i altele.Fisierul video va fi salvat in format MP4.?n cazul ?n care aplica?ia red? clipuri video sau alt con?inut protejat care nu dori?i s? fie capturat de c?tre recorder de ecran , pute?i folosi SurfaceView.setSecure ( ), pentru a marca con?inutul ca sigur .3346450609600Pute?i accesa ecranul de ?nregistrare prin intermediul instrumentului ADB inclus ?n SDK-ul Android , folosind comanda ADB shell screenrecord . De asemenea, pute?i lansa prin intermediul panoului de DDMS ?n Android Studio .3.6.2 Monitorizare audioAplicatiile pot utiliza noi instrumente de monitorizare ?n efectul Visualizer pentru a ob?ine actualiz?ri de pe v?rf ?i nivelul de RMS pentru orice fisier audio ?n curs de redare pe dispozitiv. 3.7 Capacitati de randare imbunatatite31445202870203.7.1 ?mbun?t??iri de performan?? (live)C?nd aplica?iile vor folosi RenderScript, vor beneficia de reglare performan?? live ?n runtime0ul RenderScript, f?r? a fi nevoie de recompilare. Graficul din dreapta arat? c??tiguri de performan?? ?n Android 4.4 pe dou? chipset-uri populare.3.7.2 Accelerarea GPUOrice aplica?ie ce foloseste RenderScript beneficiaza de accelerare GPU, f?r? modific?ri de cod sau recompilare. Bibliografie1. . . . . ................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download