Documente Academic
Documente Profesional
Documente Cultură
Proiect SOA
- Android OS -
2012
Cuprins
CAP 1.Ce este Android OS si cum s-a dezvoltat.Scurt istoric .......................................................................... 3
CAP2.Procese,Fire de executie(Threads)........................................................................................................ 10
3.3Network .................................................................................................................................................. 15
Concluzii ..................................................................................................................................................... 25
Bibliografie ................................................................................................................................................. 26
CAP 1.Ce este Android OS si cum s-a dezvoltat.Scurt istoric
Android-ul este un sistem de operare bazat pe Linux, destinat în primul rând pentru
dispozitive touchscreen mobile, cum ar fi smartphone-urile si tabletele.
Initial, acest sistem de operare a fost dezvoltat de Android Inc. , fiind mai apoi preluat de Google
si lansat in 2007, in colaborare cu Open Handset Alliance:un consortiu de companii de hardware,
software si telecomunicatii, dedicate pentru ridicarea la un alt nivel(mult mai avansat) a “open
standards” pentru telefoanele mobile inteligente.[1]
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).[1]
Acesti factori au permis ca Androidul 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 dezvolta.[1]
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]
Android este o stivă software pentru dispozitive mobile, care include un sistem de operare,
middleware și aplicații-cheie.SDK-ul Android oferă instrumente și API-uri necesare pentru a
dezvoltarea de aplicații pe platforma Android folosind limbajul de programare Java.
Dintre facilitatile pe care le poate oferi acest sistem de operare putem mentiona:
• GSM Telephony
•Kernel-ul Linux, care include drivere pentru hardware, retea, accesul la de fișierul de sistem și
comunicarea inter-proces.[2]
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]
Principala platforma hardware utilizata de Android este arhitectura ARM. In urmatoare figura este
ilustrat kernelul Linux folosit de Android OS:
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.
Redimensionarea Ioctl mai rapidă și mai flexibilă, astefl incat Kernelul poate efectua toate
activitățile de resizing.
Librarii
Runtime
Runtime-ul la Android este realizat cu ajutorul a doua functiuni: Dalvik Virtual Machine și
biblioteci Core Java.
Acesta este un tip de JVM utilizat în dispozitivele Android pentru a rula aplicații, fiind
optimizat pentru medii cu putere de procesare si memorie mica.
Spre deosebire de JVM, Dalvik Virtual Machine nu execută fișiere cu extensia .class, ci
fisiere cu extensia .dex .Acestea provin din fisiere cu extensia .class, dar sunt mai eficiente in
mediile cu resurse putine.O unealta numita dx este folosita pentru a converti fisierele Java cu
extensia .class in fisiere cu extensia .dex.Multiple fisiere cu extensia .class pot fi incluse intr-un
singur file cu extensia .dex.Pentru a economisi spatiul, variabilele de tip string de date si
constantele sunt incluse o singura data intr-un fisier output cu extensia .dex.De asemenea , o masina
Dalvik poate converti si un Java bytecode, intr-un set alternativ de instructiuni, utilizat de aceasta.
Un fișier .dex necomprimat provenit dintr-un file de tip .class este de obicei cu câteva procente mai
mic în dimensiuni, decât o arhiva Java, provenita din acelasi file. [4][5]
Executabile Dalvik pot fi modificate din nou, atunci când sunt instalate pe un dispozitiv
mobil. În scopul de a obține optimizări suplimentare, un octet poate fi schimbat în anumite tipuri de
date, structuri simple de date și biblioteci de funcții putand fi legate în linie, astfel incat empty class
objects pot fi scurt-circuitate.[4][5]
Dalvik VM permite crearea de instante multiple ale masinii virtuale simultan,oferind securitate ,
izolarea instantei, managementul memoriei si suport pentru threading.
Fiind optimizata pentru cerințele de memorie scazute, Dalvik are unele caracteristici specifice care
o diferențiază de alte masini virtuale standard:
-pool-ul a fost modificat pentru a utiliza numai pe indices pe 32 de biți simplificarea interpretarii;
Standardul Java bytecode executa instrucțiuni ale stivei pe 8 biti. Variabilele locale trebuie să fie
copiate din/in stivă operandulului cu instrucțiuni separate. Dalvik folosește în schimb propriul set t
de instrucțiuni pe 16 biti care lucrează direct cu variabilelor locale.Variabila locală este frecvent
aleasa prin intermediul unui "virtual register field" , pe 4 biti. Acest lucru reduce numărul de
instrucțiuni folosite și creste viteza de interpretare.[5]
Mai mult decât atât, în conformitate cu Google, proiectarea Dalvik permite unui dispozitiv sa
execute mai multe instanțe de VM mai efficient decat JVM.
Aceste biblioteci sunt diferite de cele Java SE si Java ME.Totusi, aceste biblioteci oferă cele mai
multe dintre funcționalitățile definite în bibliotecile Java SE.Ele reprezinta un subset derivat din
implementarea Apache Harmony Java.[5]
Aplicatii Framework
Acestea sunt blocuri cu care cererile noastre interacționează direct. Aceste programe
gestioneaza funcțiile de bază ale telefonului, cum ar fi managementul resurselor, managementul
apelurilor de voce, etc.
Prin furnizarea unei platforme de dezvoltare deschise, Android ofera dezvoltatorilor posibilitatea de
a construi aplicații extrem de bogate și inovatore. Acestia au acces la hardware-ul dispozitivului,
informația de localizare, executația serviciilor de background,setarea de alarme, notificări.
2.1Executia proceselor
Foreground process:
-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()).
Un proces care nu are nici o componentă in foreground, dar poate afecta ceea ce utilizatorul
vede pe ecran. Un proces este considerat a fi vizibil dacă oricare dintre următoarele condiții sunt
adevărate:
- 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.
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.[4]
Service process
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.[4]
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.[4]
2.2Realizarea 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ă.[4]
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.[4]
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.[4]
In mod similar,un content provider, poate primi cereri de date ce provin din procese diferite.
Comunicarea interproces
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 ().[4]
CAP3. Modalitatea de stocare a datelor la Android OS
3.1Baza de date
API-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.[9]
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.[9]
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.[9]
import android.app.Activity;
import android.content.SharedPreferences;
@Override
protected void onCreate(Bundle state){
super.onCreate(state);
. . .
// Restore preferences
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
boolean silent = settings.getBoolean("silentMode", false);
setSilent(silent);
}
@Override
protected void onStop(){
super.onStop();
fos.write(string.getBytes());
fos.close();
Se mai poate vorbi si de stocare externa a datelor.Acest tip de stocare e ilustrat in exemplul
urmator, unde este aratat modul in care poate fi verificata disponibilitatea unui mediu de stocare
extern:[9]
if (Environment.MEDIA_MOUNTED.equals(state)) {
} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
mExternalStorageAvailable = true;
mExternalStorageWriteable = false;
} else {
// Something else is wrong. It may be one of many other states, but all
we need
3.3Network
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:
java.net.*
android.net.*
CAP4.Evolutie Android OS-variante
In momentul actual cele mai utilizate versiuni ale Android OS sun Gingerbread,Ice Cream
Sandwich si Jelly Bean.
Bibliotecile scrise în C și în alte limbaje pot fi compilate în cod mașină ARM și instalate cu ajutorul
kit-ului Android Development. Clasele fi apelate din codul Java care rulează sub Dalvik VM
folosind apelul System.loadLibrary, care face parte din standardul de clase Java Android.
Debuggerul ADB da un shell root care permite codului ARM sa fie uploadat si
executat.Acest cod poate fi compilat utilizand GCC pe un calculator standard.Biblioteca grafică pe
care Android o utilizează pentru a arbitra și a controla accesul la acest dispozitiv se numește Skia
Graphics Library (SGL), și a fost lansata sub licență open source . Skia are backend, atât pentru
win32 și Cairo, permițând dezvoltarea de aplicatii cross-platform, și este motorul grafic care stă la
baza browserul Google Chrome web.
Android software development este procesul prin care noi aplicații sunt create pentru
sistemul de operare Android. Aplicatiile sunt de obicei dezvoltate în limbajul de programare Java
folosind Android SDK, dar si alte instrumente de dezvoltare sunt disponibile.[13]
Aplicatiile standard pentru Android se scriu in limbaj Java si sunt compilate in bytecode
Dalvik, ceea ce le ofera o viteza medie de executie si acces la cele mai multe biblioteci ale
sistemului. Pentru dezvoltarea unor astfel de aplicatii este nevoie de Android SDK. In urma
compilarii rezulta pachete .apk care pot fi instalate de dispozitiv sau pot fi rulate in dispozitive
virtuale (AVD).[13]
Aplicatii pot fi dezvoltate si folosind Android NDK (Native Development Kit), care este un
set de tooluri pentru crearea de biblioteci din cod C/C++ si pentru incorporarea acestora in pachete
.apk. Este recomandata utilizarea NDK nu doar pentru programatorul care are o preferinta pentru
C/C++, ci doar acolo unde APIul clasic nu ofera functionalitatile necesare.[13]
O alta modalitate de a implementa aplicatii este suita HTML5 + AJAX + CSS. Diversitatea
platformelor mobile creste si crearea unei aplicatii presupune dezvoltarea pentru mai multe
platforme simultan. Rularea in browser a unei aplicatii AJAX este o forma de a contracara aceasta
fragmentare. Nu toate aplicatiile sunt insa potrivite pentru aceasta forma de dezvoltare, fiind uneori
limitata in termeni de functionalitate si performanta.[13]
Componentele unei aplicatii standard:
Componentele sunt elementele de baza ale unei aplicatii. Ele reprezinta puncte de interactiune cu
aplicatia, din partea utilizatorului sau a sistemului, a altor aplicatii etc. Exista patru tipuri de
componente:[13]
Activitati (Activity): fiecare ecran al interfetei utilizator este creat printr-o activitate. Spre
exemplu, un joc ar putea avea o activitate pentru meniul principal, o activitate pentru
fereastra de optiuni, una pentru ecranul de joc etc. Activitatile sunt independente, in sensul
ca o alta aplicatie poate apela oricare din activitatile aplicatiei dezvoltate de noi, daca
dorim acest lucru. O activitate este implementata ca subclasa a clasei Activity
Servicii (Service): serviciile sunt componente care ruleaza in fundal, pentru interactiunea cu
alte procese sau pentru a desfasura actiuni indelungate, fara interactiune cu utilizatorul.
Spre exemplu un serviciu poate derula muzica pentru joculetul nostru. Un serviciu este
implementat in cod sub forma unei subclase a clasei abstracte Service.
Furnizori de continut (Content providers): un furnizor de continut este folosit pentru a
gestiona datele, publice sau private, folosite de aplicatie. El scrie si citeste din sisteme de
fisiere, baze de date SQLite, in retea etc. si poate fi apelat de catre alte aplicatii pentru a
furniza date, daca dorim acest lucru. Un furnizor de continut este implementat ca subclasa
a clasei abstracte ContentProvider.
Receptori de broadcast (Broadcast receivers): un receptor de broadcast este o componenta
ce raspunde la anunturile de interes general din sistem (e.g. anunt ca ecranul a fost stins, ca
bateria este aproape descarcata etc.). Receptorii de broadcast nu au interfata cu utilizatorul,
insa pot crea notificari si pot semnala alte componente ale aplicatiei. Un receptor de
broadcast este implementat ca subclasa a clasei abstracte BroadcastReceiver.[13]
Pentru dezvoltarea de aplicatii standard Android sunt necesare: mediul Android SDK si de
programare Eclipse si pluginul ADT.
package com.example.android.accelerometerplay;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.BitmapFactory.Options;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.Surface;
import android.view.View;
import android.view.WindowManager;
/**
* This is an example of using the accelerometer to integrate the device's
* acceleration to a position using the Verlet method. This is illustrated
with
* a very simple particle system comprised of a few iron balls freely moving
on
* an inclined wooden table. The inclination of the virtual table is
controlled
* by the device's accelerometer.
*
* @see SensorManager
* @see SensorEvent
* @see Sensor
*/
http://www.apache.org/licenses/LICENSE-2.0
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="1"
android:versionName="1.0"
package="com.example.android.accelerometerplay">
<application android:icon="@drawable/icon"
android:label="@string/app_name">
<activity android:name=".AccelerometerPlayActivity"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="5"></uses-sdk>
<uses-permission android:name="android.permission.VIBRATE"></uses-permission>
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-
permission>
</manifest>
Aplicatia instalata si rulata pe sistemul Android arata astfel:
Pentru a putea face o evaluare corecta a evolutiei acestui sistem de operare este necesara
realizarea unei comparatii intre el si un alt OS.
De aceea am ales sa compar doua variante lansate de Google si Apple:Ice Cream Sandwich si iOS
5.[10][11]
iOS 5 vs Android 4.0: Interfata
Diferența evidentă în interfața Android 4.0 este adăugarea de butoane de meniu pe ecran
(Înapoi, Acasă și Apps recente), in pe partea de jos a ecranului.De asemenea , adaugat si optiunea
pentru resizable widgets sau posibilitatea de organizare a aplicatiilor in foldere prin dragging-ul
uneia deasupra celuilalt. [10][11]
In mod similar, la iOS 5 avem de-a face cu un buton Home cu dublu-tapping, ce aduce in prim
plan, in partea de jos a ecranului, o bara Multitasking cu ultimele aplicatii utilizate.De asemenea, ca
si in cazul Android-ului exista posibilitatea de tap and hold, pentru a elimina din lista aplicatia care
nu ne mai intereseaza sa fie deschisa. [10][11]
Diferența notabila in cee ce priveste multitaskingul la cele doua sisteme de operare este “dedesubt”.
Aplicațiile Android sunt capabile de ceva asemanator cu une PCcand vine vorba de multitasking,
în timp ce iOS forțează toate aplicațiile care nu sunt utilizate în prezent sa se inchida, cu excepția
cazului în care se utilizeaza una dintre funcțiile de backgroung specifice,careia sistemul de operare
creat de care Apple ii permite sa ruleze.
Abordarea Android oferă mai multă libertate și flexibilitate atât utilizatorilor cat și dezvoltatorilor,
în timp ce abordarea Apple este proiectata pentru a preveni orice probleme de performanță cu
aplicațiile, și pentru a conserva durata de viață a bateriei.
Ambele sisteme de operare (Ice Cream Sandwich si iOS 5 ) beneficiaza de o scara larga de
optinul de email,webmail account settings, si suport Exchange incorporat.iOS 5 adauga mesageria
prin internet cu ajutorul iMessage to iPhones and iPads,ce permite transmiterea de mesaje gratuite,
poze si video altor utilizatori de iOS.Totodata beneficiaza si de functia FaceTime videocalling care
este tot built-in. [10][11]
Android 4.0 adauga mai multe carateristici Google+ , incluzand mesajele si Google
Hangout, care sunt similare cu iMessage si FaceTime calling prezente la iOS 5. [10][11]
Este greu de precizat care dintre cele doua sisteme de operare este mai bun, pentru ca
fiecare dintre cele doua beneficiaza de facilitati pe care celalalt sistem nu le are.
iOS are un sistem foarte bun de aplicatii ,cu pretul lipsei customizarii insa.Androidul beneficiaza de
un sistem de multitasking mult mai flexibil, dar nu are anumite peformante pe care iOS le poate
atinge.Desi beneficiaza de flash, se incarca mult mai greu decat iOS.
De aceea , alegerea unuia dintre sisteme depinde atat de nevoile fiecarui utilizator in parte, cat si de
ce performante ne dorim sa atinga device-ul pe care ruleaza unul din sisteme.
In testele de benchmark s-a dovedit ca diferentele intre iOS si Android sunt destul de mici, dar
fiecare are anumite segmente pe care este lider.
Bibliografie
[1] http://en.wikipedia.org/wiki/Android_(operating_system)
[2] http:/www.android-app-market.com/android-architecture.html
[3] http://elinux.org/Android_Architecture#Overview_presentations-
[4] http:/developer.android.com/guide/components/processes-and-threads.html
[5] Http://en.wikipedia.org/wiki/Dalvik_(software)
[6] http://www.android.com/branding.html
[7] http://developer.android.com
[8] http://developer.android.com/guide/index.html
[9] http://developer.android.com/guide/storage
[10] http://www.roughlydrafted.com/inside-googles-android-and-apples-iphone-os-as-software-
markets/
[11] http://www.techradar.com/news/phone-and-communications/mobile-phones/mobile-
computing/tablets/ios-5-vs-android-4-0-ice-cream-sandwich-1035481
[12]
http://docs.huihoo.com/android/3.0/resources/samples/AccelerometerPlay/src/com/example/androia
/accelerometerplay/AccelerometerPlayActivity.html
[13] http://cs.curs.pub.ro/wiki/si/lab/2012/android1#programarea_pentru_android