Vous êtes sur la page 1sur 6

Développement d'applications pour

terminaux mobiles

3. Structure d’une application


Une application Android est constituée de «morceaux» ou composants, potentiellement
réutilisables au sein d’autres applications. Les Activities, les Services, les
BroadcastReceivers, les ContentProviders et les Intents les éléments principaux utilisés
dans le développement Android. Nous centrerons cette partie sur les activités, partie la plus
«visible» des applications Android.

3.1. Activity

3.1.1 Principe

Une activité à un écran dédié à une action particulière, par exemple l’écriture d’un message
SMS, l’édition de paramètres de configuration, etc. Une application utilisateur est composée
d’au moins une activité. Les activités sont indépendantes les unes des autres, et elles ont la
possibilité de lancer d’autres activités pour cheminer dans l’application. Si une application est
composée de plusieurs activités, une de ces activités est marquée comme activité principale,
c’est elle qui sera lancée au départ lors de l’exécution de l’application.

Trois activités composant une application.


3.1.2 Cycle de vie

Cycle de vie d’une activité - android.com

Une activité possède plusieurs points d’entrée, appelés par le système en fonction des
changements d’état de l’application.

• onCreate(Bundle) : lancement de l’activité. Un objet de type Bundle contient des données


de persistance éventuellement sauvegardés avant la terminaison précédente de l’activité. C’est
dans cette méthode que l’on initialise les variables de l’activité, l’interface graphique, les
attributs, etc.
• onStart() : apparition de l’activité à l’écran
• onPause() une autre activité est mise en avant, le périphérique passe en veille
• onResume() l’activité revient au premier plan
• onStop() : l’activité n’est pas à l’écran
• onRestart() : après que l’activité a été stoppée, retour au premier plan
• onDestroy() fin de l’activité •onSaveInstanceState(Bundle) : l’activité doit être «tuée», un
objet Bundle est passé en paramètre pour sauvegarder des données.

Une activité possède ainsi 4 états :

• L’activité est au premier plan : elle est Active ou Running


• L’activité est visible, mais n’est pas au premier plan (par exemple recouverte par une pop-
up, par une autre activité) : elle est Paused
• L’activité est recouverte par une autre activité : elle est Stopped
• Si une activité est Stopped ou Paused et que le système a besoin de ressources, l’activité
peut être «tuée». Lors de son prochain affichage, l’activité est redémarrée depuis le début
(appel de onCreate())

3.1.3 Créer une activité

Pour créer une activité, nous utilisons l’assistant d’Eclipse (File > New... > Android
Activity) Une nouvelle classe héritant de android.app.Activity est créée. Nous devons au
moins implémenter une méthode, onCreate : c’est le point d’entrée, appelé au démarrage de
l’activité

Une activité et sa méthode onCreate

3.2. Intents

Les objets de type Intent des messages (intentions) émis par des applications, à destination
des trois composants Activity Service et BroadcastReceiver C’est ce mécanisme qui est mis
en œuvre pour naviguer au sein d’une application, pour appeler d’autres applications ou pour
envoyer ou recevoir des messages système

3.2.1 Structure d’un message Intent

Un objet Intent composé de plusieurs attributs qui permettent de véhiculer les informations
du message, notamment :

• ComponentName : le nom du composant à qui est destiné directement le message. Nous


utilisons la méthode setClassName pour initialiser cette valeur avec le nom complet du
package et celui de la classe destinataire.
• Action une chaîne de caractère qui décrit une action à exécuter, par exemple
android.intent.action.DIAL (émettre un appel téléphonique),
android.intent.action.WEB_SEARCH (lancer une recherche google), etc. Voir la liste sur
http://developer.android.com/reference/android/content/Intent.html.
• Data données qui accompagnent l’action à exécuter, sous la forme d’une URI et d’un type.
Par exemple si l’action est DIAL, nous devons passer le numéro de téléphone à joindre; pour
WEB_SEARCH, la chaîne de caractères à rechercher.
• Extras paires de clés/valeurs transmises avec le message, sans format particulier.

Les intents se classent en deux catégories, les intents explicites et intents implicites Les
intents explicites visent à acheminer des messages à l’intérieur application, notamment pour
passer d’une activité à l’autre. Elles nomment explicitement le nom du composant à appeler
(package, nom de classe) et lui passent éventuellement des informations à travers les attributs
Data et Extra.

Appel explicite d’une seconde activité dans l’application, avec données supplémentaires.

Les intents implicites envoient un message sans destinataire particulier. Les composants
utilisent un mécanismes de filtres (Intent Filters) pour recevoir les messages susceptibles de
les intéresser.

3.2.2 Naviguer entre activités avec les Intents

Comme nous l’avons vu, les Intents représentent des messages entre composants. Supposons
que nous ayons une première activité dans notre application, MainActivity, qui souhaite en
lancer une seconde, SecondActivity.

Succession des deux activités.

Cas 1 : A la fin de l’exécution de la seconde activité (menu Back), nous souhaitons envoyer
un résultat. Dans la première activité, nous initialisons un premier objet Intent, comme vu
précédemment. Puis nous démarrons la seconde activité à l’aide la méthode
startActivityForResult(Intent, code). Le code passé en argument est un simple entier
permettant d’identifier les différentes activités susceptibles d’être lancées.
Appel d’une seconde activité avec attente de retour

Dans la seconde activité, nous récupérons le message et son contenu :

Données récupérées du message

A la fin de l’exécution de la seconde activité, nous envoyons le résultat de l’exécution à


l’activité initiatrice, en implémentant la méthode finish() de la classe Activity. Nous y
préparons un objet Intent avec les données à transmettre :

Préparation d’un résultat vers l’activité d’origine

Dans la première activité, nous implémentons la méthode onActivityResult() pour recevoir le


résultat de la seconde activité. Le paramètre requestCode correspond à l’entier passé en
argument lors de l’appel à startActivityForResult.

Récupération des données de la seconde activité

Cas 2 : A la fin de l’activité 2, nous n’avons pas besoin d’un retour. Dans la première activité,
nous initialisons un premier objet Intent, comme vu précédemment. Puis nous démarrons la
seconde activité à l’aide la méthode startActivity() :
Démarrage d’une activité sans attente de code de retour

3.3. En Résumé

• Chaque écran visible par l’utilisateur correspond à une Activité


• Une application peut être composée d’une ou plusieurs activités indépendantes, une des
activités est marquée comme principale
• Une activité peut démarrer d’autres activités à travers un mécanisme de messages, les
Intents