Conceptes bàsics

De WikiCat IT
Dreceres ràpides: navegació, cerca

En aquesta part veurem conceptes bàsics d'android, així com la seva arquitectura i el funcionament dels cicles de vida d'una aplicació.

Arquitectura del SO Android

Android-Schema.jpg

Si veiem la imatge superior, on es veu l'arquitectura del sistema operatiu, podrem observar que esta compost per capes. De totes elles la més important alhora de fer una aplicació és la "Android RunTime", ja que en ella trobem les llibreries "Core Libraries" i dues maquines virtuals que serveixen per executar les aplicacions, "Dalvik Virtual MAchine" i "ART Virtual Machine".

Aquesta maquina virtual serà l'encarregada de traduir el bytecode de les aplicacions en codi natiu entés pels dispositius.

Dalvik Virtual Machine

Quan es compila una aplicació d'Android en comptes de generar arxius .class o .jar amb bytecode Java, es generan uns arxius .dex (Dalvik Executables). El que trobem dins d'aquests arxius és el resultat de compilar el codi java generat i combinar-ho juntament amb les llibreries utilitzades en un o diversos arxius .dex mitjançant l'eina dx.

Un altre aspecte en el qual Dalvik és superior a d'altres maquines és en la gestió de memoria dels objectes obsolets, o el que és el mateix "Garbage Collector" o recolector de brossa. Quan un objecte en Java deixa de ser utilitzat, no passa com d'altres llenguatjes de programació que es lliberen recursos mitjaçant programa, en aqui s'encarrega el propi Garbage Collector per revisar els objectes que no son utilitzats i alliberar memoria. Quants més cops s'executi aquest recolector, més neta es trobarà la memoria i més recursos trobarem disponibles, però com a contrapartida hem de ser conscients que aquest programa utilitza cicles de CPU amb la qual cosa les aplicacions que s'estiguin executant aniran més lentes en aquest moment.

ART Virtual Machine

El problema més gran que presenta Dalvik en la seva versió actual, és que el primer cop que s'executa el programa triga molt en trobar-se disponible per l'usuari. Quan és mata una aplicació i es torna a executar la mateixa, això implica que s'ha de tornar a executar tot el procés de compilació, amb la conseqüéncia de desgast de la bateria i temps que implica.

Les millores que ofereix ART davant de Dalvik:

  • Nou GC "Garbage Collector": es tracta d'un programa que s'executa cada cert temps, eliminant de la memoria objectes dels programes que no s'utilitzen per alliberar recursos.
  • Compilació de tipus AOT "Ahead-Of-Time": aquest tipus de compilació millora la velocitat i redueix el footprint de memoria utilitzada (quantitat de memoria).

Per defecte ART esta desactivat a favor de Dalvik en Android 4.4. Per activar-lo cal anar a "Ajustes" d'Android, seleccionar "Opcions de Desenvolupador" i escollir "Temps d'execució".

NOTA: ART es troba en fase de probes en Android 4.4, és posible que algunes aplicacions no funcionen com s'espera.

Blocs

Per escriure una aplicació Android podem utilitzar cinc blocs fundamentals, denominats: Activitat "Activity", Receptor d'emisions d'intents "Broadcast Intent Receiver", Servei "Service", Proveedor de Contingut "Content Provider" i Fragment "Fragment".

Activity

Encara que és possible realitzar una Activity sense representació gràfica, es pot dir que una Activity correspon a una finestra o un quadre de dialeg en una aplicació d'escritori.

Una Activity és una classe on mostrarem Views (vistes) per generar la interfaç d'usuari i serem capaços de respondre a events que es realitzin sobre ella.

Els Views es dibuixen en pantalla i son el nexe d'unió entre les Activity i l'usuari, ja que s'encarreguen de rebre els events realitzats per aquest sobre l'espai de pantalla on s'ha dibuixat la View.

activity.setContentView(viewHierarch);

On viewHierarch és un objecte que implementa la classe View i que a la seva vegada és el pare de la jerarquia que es veu.

Broadcast Intent Receiver

Un Broadcast Intent Receiver és un component que simplement s'encarrega de rebre i reaccionar davant de certs missatges emesos pel sistema.

Context.sendBroadcast();

Cada aplicació pot tenir tants Broadcast Intent Receiver com consideri necessaris, de la mateixa forma que pot emetre tants missatges com siguin ooportuns, aixó si, tots els receptors han de tenir la classe BroadcastReceiver.

context.registerReceiver();

Els Broadcast Intent Receiver no tenen una interfaç gràfica assosiada, però com hem vist, valdria amb que llancessin una activitat com a reacció al missatge rebut. Otra acció molt utilitzada pels Broadcast Intent Receiver és la notificació a l'usuari per mitjà del NotificationManager, que permet alertar de multiples modes, com per exemple posant un missatge en la barra d'estat o fent vibrar el dispositiu o encenent els leds d'avís.

Service

Les activitats tenen un periode de vida curt i poden ser executades i poc temps despres ser eliminades. Els Services (serveis) estan dissenyats per mantenir-se executant-se (si fos necessari) sense dependre de cap Activity. Cada servei ha de tenir la classe Service.

context.startService();

D'aquesta forma s'executa el codi en segon pla i no dependrà de la Activity que l'hagi llançat.

context.bindService();

Una vegada conectat el servei, podrà comunicar-se amb ell per mitjà de la interface que el propi servei faci publica.

Content Provider

Els Content Providers (proveedors de continguts) proporcionan una capa d'abstracció per accedir a dades emmagatzemades per una aplicació de mode que poden ser accessibles per d'altres aplicacions. Les aplicacons poden guardar la seva informació en la base de dades SQLite que proporciona Android, en fitxers o d'altres sistemes d'emmagatzematge.

Fragment

Apareixen per solucionar el problema de multiples pantalles. La seva funció principal és la reutilització tant del codi logic de treball com de les diferents interfaces d'aquests codis.

Intents

Es realitza mitjnaçant missatges asíncrons nomenats Intent (intents). Els Intent son llançats constantment pel sistema per notificar diversos events, des de la inserció de la tarja SD o que el dispositiu s'esta quedant sense bateria fins a events especifics d'alguna aplicació. Les aplicacions no sols poden respondre als Intent, sino que poden crear els seus propis per llançar una altra activitat o per avisar que alguna cosa pasa.

Pel cas dels Broadcast Intent Receiver, l'Intent conté el nom de l'acció a anuciar.

  • Activity: per activar una Activity, el que es fa es cridar els metodes context.startActivity() o activity.startActivityForResult() pasan com a parametre un objecte Intent. Si s'espera resposta cal utilitzar el segon. La Activity que respon a la petició pot veure l'Intent que ha causat la seva activació per mitjà de getIntent().
  • Broadcast: per iniciar un Broadcast Receiver Intent, s'ha de cridar al metode context.sendBroadcast(), context.sendOrderedBroadcast() o context.sendStickyBroadcast(). Android s'encarrega de cridar els metodes onReceive() de cadascuna dels BroadcastReceiver que es trobin registrats en el sistema.
  • Service: per iniciar un Service o per indicar noves instruccions a un que ja es troba en actiu cal realitzar una crida al metode context.startService() pasan com a parametre un objecte Intent.

Cicle de Vida

Els components de les aplicacions tenen uns cicles de vida que dependran de la situació en la que es trobi en cada moment l'aplicació, des d'on es crea i es capaç de respondre a events fins que es destrueixi i s'alliberin tots els recursos utilitzats, l'aplicació passarà per diferents estats.

  • Activa: es quan l'usuari veu l'activitat i pot interactuar amb ella per la pantalla.
  • Pausada: quan l'activitat ha passat a segon pla, pero encara esta visible, es quan una altra activitat es coloca sobre l'activitat que passa a pausa, però la nova activitat no tapa tota l'activitat anterior. L'activitat pausada pot ser matada pel sistema si necessita alliberar recursos per la nova activitat.
  • Parada: quan l'activitat passa a segon pla i a més a més esta totalment tapada per la nova activitat. En aquest cas el sistema també pot optar per matar aquesta activitat si necessita més recursos de memoria dels disponibles.
  • Destruida: l'activitat no es troba ja disponible, se han alliberat tots els seus recursos i en cas de ser cridada, necessitaria començar un nou cicle de vida.

Tot seguit un esquema amb totes les funcions que s'implementen.

Android-Activity-Lifecycle.png

Eines de l'usuari
Espais de noms

Variants
Navegació
Eines