AccueilAndroidStructures d'applications Android: activités et fragments

Structures d’applications Android: activités et fragments

Les applications Android ont une structure distincte par rapport à d’autres plates-formes telles que iOS, Windows ou macOS. Que vous débutiez dans le développement d’applications Android ou que vous souhaitiez approfondir vos connaissances, il est important de comprendre les composants clés qui composent les applications Android.

Dans cet article, Bardimin abordera en détail Activity, Fragment, Intent, Broadcast Receiver et Service, qui sont les composants essentiels pour garantir le bon fonctionnement des applications Android.

En comprenant comment chacun de ces composants fonctionne et interagit, vous pouvez créer une application qui est non seulement efficace, mais aussi facile à gérer et à développer. Que vous soyez débutant ou développeur expérimenté, ce guide vous aidera à comprendre la structure des applications Android et à les implémenter dans vos projets.

Commençons par explorer les Activity, les composants de base responsables de l’affichage de l’interface utilisateur (UI) dans les applications Android.

Android Application Structure

1. Activity : Interface utilisateur de base

Activity’est l’un des éléments les plus importants dans le développement d’applications Android. Cet élément est chargé d’afficher le (UI) user  interface et de réguler l’interaction de l’utilisateur avec l’application. Chaque Activity représente généralement une vue unique au sein de l’application, et les applications Android se composent souvent de plusieurs Activity qui collaborent les unes avec les autres pour offrir une expérience utilisateur complète.

Par exemple, dans une application de calendrier :

  • Activity First : affiche une liste des emplois du temps quotidiens des utilisateurs.
  • Activity Deuxièmement : Permet aux utilisateurs d’ajouter de nouveaux rendez-vous en remplissant des formulaires.

Setiap Activity est conçu pour effectuer des tâches spécifiques et peut être consulté séparément, à la fois depuis l’application elle-même et depuis d’autres applications. Cela fait de Activity un composant très flexible et réutilisable.

Principales caractéristiques de l’activité

  • Indépendant : Chaque Activity fonctionne indépendamment et est indépendant des autres Activity.
  • Peut être appelé par Intent : Activity est accessible à l’aide de Intent, soit explicitement (en mentionnant directement le nom de la classe), soit implicitement (en spécifiant l’action que vous souhaitez entreprendre).
  •  (Lifecycle) Cycle de vie : Activity a des cycles de vie gérés par des systèmes Android, tels que onCreate(), onStart(), onResume() et onDestroy(), qui permettent aux développeurs de contrôler le comportement de l’application lorsqu’Activity est créée, affichée ou arrêtée.

Comment fonctionne l’activité

Activity fonctionne de manière autonome, ce qui signifie que chaque Activity peut fonctionner sans dépendre d’autres Activity. Cela permet Activity être réutilisé dans une variété d’applications.

Exemples de réutilisation d’activités

  • Applications de messagerie : une application de messagerie peut avoir un Activity pour envoyer des messages. Activity peut être utilisé par d’autres applications, telles que l’application de calendrier, pour envoyer des invitations à des réunions sans avoir à créer un nouveau Activity à partir de zéro.
  • Applications de médias sociaux : les Activity de partage de contenu peuvent être réutilisées dans diverses applications, telles que des galeries de photos ou des applications d’actualités.

La possibilité de réutiliser cette Activity permet non seulement de gagner du temps lors du développement, mais aussi de maintenir la cohérence de l’interface utilisateur dans diverses applications.

Communication entre les activités

Activity ne pouvez pas interagir en personne. Alternativement, Android fournit un mécanisme appelé Intent pour démarrer une autre Activity et transférer des données entre Activity.

Fonctionnement de l’intention

Vous pouvez utiliser Intent pour ouvrir une nouvelle Activity à partir d’un Activity actif. Par exemple, lorsqu’un utilisateur appuie sur le bouton « Ajouter un rendez-vous » dans l’application de calendrier, Intent ouvrira une nouvelle Activity pour remplir le formulaire de rendez-vous.

Intent pouvez également transporter des informations d’un Activity à un autre Activity. Par exemple, vous pouvez envoyer les détails du rendez-vous à partir de la liste des rendez-vous Activity à la liste Activity détails du rendez-vous.

Exemples d’utilisation de l’intention

  • Applications de commerce électronique : lorsque les utilisateurs sélectionnent des produits dans la liste, Intent est utilisé pour ouvrir les détails du produit Activity et envoyer des informations telles que les noms de produits, les prix et les images.
  • Application de chat : Intent utilisée pour ouvrir des Activity de chat et envoyer des données telles que des identifiants d’utilisateur et des noms de contact.

2. Fragment : modularité de l’interface utilisateur

Fragment est un élément important dans le développement d’applications Android qui permet de Activity décomposer en petites pièces modulaires. Chaque Fragment dispose de sa propre  interface utilisateur et de sa propre logique (UI), ce qui facilite la gestion d’une interface plus flexible et dynamique.

En tirant parti de Fragment, vous pouvez créer des applications plus réactives aux différentes tailles d’écran et orientations des appareils, telles que les téléphones, les tablettes ou les appareils pliables.

Avantages de l’utilisation de Fragment

Fragment offre quelques avantages clés dans le développement d’applications Android :

  1. Modularité : en divisant Activity en Fragment, vous pouvez gérer chaque partie de l’interface séparément, ce qui facilite le développement et la maintenance du code.
  2. Flexibilité : Fragment permet l’apparition de plusieurs parties de l’interface en un seul Activity, particulièrement utile pour les appareils dotés de grands écrans tels que les tablettes.
  3. Réutilisabilité : Fragment peuvent être réutilisés dans une variété de Activity, ce qui réduit la répétition du code et améliore l’efficacité du développement.
  4. Adaptabilité : Fragment personnalisation facile de l’interface pour différentes tailles d’écran et orientations d’appareils.

Exemples d’utilisation de fragments dans des applications de commerce électronique :

  • Fragment First : Affiche la liste des produits sur le côté gauche de l’écran.
  • Fragment seconde : affiche les détails du produit sur le côté droit de l’écran.
  • Sur mobile, un seul fragment est affiché à la fois, tandis que sur les tablettes, les deux Fragment peuvent être affichés en même temps.

Comment fonctionne Fragment

Fragment ont un cycle de vie similaire à Activity, y compris des méthodes telles que onCreateView(), onStart() et onDestroyView(). Cependant, le cycle de vie n’est Fragment lié à la Activity qui l’affiche.

Vous pouvez ajouter Fragment à Activity à l’aide de FragmentManager et FragmentTransaction.

FragmentManager fragmentManager =getSupportFragmentManager() ;
FragmentTransaction fragmentTransaction =fragmentManager.beginTransaction() ;
fragmentTransaction.add(R.id.fragment_container, new MyFragment()) ;
fragmentTransaction.commit() ;

Fragment ne peuvent pas communiquer directement entre eux. Alternativement, la communication s’effectue par l’intermédiaire du Activity qui abrite le Fragment ou par l’intermédiaire d’une interface (interface) pour transférer des données.

3. Intent : Mécanisme de communication entre les composants

Intent’est l’un des mécanismes clés du développement d’applications Android. Ce composant est utilisé pour démarrer un Activity, un Service ou envoyer des Broadcast. De plus, Intent permet également la communication entre les composants d’une même application ou même entre différentes applications.

Intent peuvent être différenciés en :

  • Explicite : Appelle un composant spécifique (tel que Activity ou Service) en mentionnant directement son nom de classe.
  • Implicite : spécifiez l’action que vous souhaitez effectuer ou le type de données que vous souhaitez traiter, et le système Android sélectionnera le composant le plus approprié.

Types d’intention

1. Explicit Intent

Explicit Intent est utilisé lorsque vous savez clairement quel composant vous souhaitez appeler, tel qu’un Activity ou un Service spécifique dans votre application.

Comment ça marche :

Vous spécifiez le nom de la classe de composant à laquelle vous souhaitez accéder. Par exemple, le démarrage d’une nouvelle Activity pour afficher les détails du produit.

Intent intent new Intent(this, ProductDetailActivity.class) ;
startActivity(intent) ;

Exemple d’utilisation :

  • Démarrez une nouvelle Activity pour afficher le formulaire de connexion.
  • Démarrez Service pour télécharger des fichiers en arrière-plan.

2.Intent Implicit

Intent Implicit est utilisé lorsque vous souhaitez demander au système Android de sélectionner le composant le plus approprié en fonction des actions ou des types de données que vous spécifiez.

Comment ça marche :

Vous spécifiez les actions (telles que ACTION_VIEW) et les données (telles que les URI ou les types MIME) que vous souhaitez traiter. Le système Android recherchera un composant capable de gérer la demande.

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(“https ://www.example.com”)) ;
startActivity(intent) ;

Exemple d’utilisation :

  • Ouvrez l’URL dans le navigateur par défaut de l’utilisateur.
  • Partagez du texte ou des images avec d’autres applications (telles que les réseaux sociaux ou les e-mails).
  • Sélectionnez l’application pour ouvrir le fichier PDF.

La différence entre l’intention explicite et l’intention implicite

AspectsExplicit IntentImplicit Intent
ButAppelle des composants spécifiques dans l’application.Demander au système de sélectionner le composant approprié.
UtiliserUtilisé pour la navigation interne de l’application.Utilisé pour interagir avec d’autres applications ou composants du système.
ExempleDémarrez l’activité Détails du produit.Ouvrez l’URL dans un navigateur ou partagez du contenu.

Exemples d’utilisation de l’intention dans les applications

1. Applications de commerce électronique :

  • Explicit Intent : Démarre Activity détails du produit lorsque l’utilisateur clique sur un élément de la liste de produits.
  • Implicit Intent : Partagez les détails du produit sur les applications de médias sociaux ou par e-mail.

2. Applications de médias sociaux :

  • Explicit Intent : Démarre un Activity de commentaire lorsque l’utilisateur clique sur le bouton « Afficher les commentaires ».
  • Implicit Intent : Ouvre un lien externe dans le navigateur par défaut de l’utilisateur.

3. Applications musicales :

  • Explicit Intent : Démarre Service pour jouer une chanson en arrière-plan.
  • Implicit Intent : Partagez des chansons avec d’autres applications comme WhatsApp ou Instagram.

4. Broadcast Receiver : Répondre aux modifications du système

Broadcast Receiver est un composant essentiel d’une application Android qui permet à votre application de répondre aux Broadcast Intent envoyés par le système Android ou d’autres applications. Broadcast Intent est un message système qui vous informe d’un changement d’état ou d’un événement spécifique, tel qu’un changement d’état de la batterie, de connectivité réseau ou d’un message SMS entrant.

En utilisant Broadcast Receiver, vous pouvez créer des applications plus réactives aux modifications de l’environnement ou du système, offrant ainsi une meilleure expérience utilisateur.

Comment fonctionne Broadcast Receiver

Broadcast Receiver s’exécute en arrière-plan et n’a pas d’interface utilisateur. Ils sont conçus pour répondre aux Broadcast Intent rapidement et efficacement. Voici quelques points clés sur le fonctionnement de Broadcast Receiver :

1. Inscription :

  • Broadcast Receiver devez être enregistré sur le système Android pour répondre à Broadcast Intent.
  • L’enregistrement peut se faire soit statique (via AndroidManifest.xml), soit dynamique (via le code du programme).

Exemple d’enregistrement statique dans AndroidManifest.xml :

 <receiver android :name=“.MyBroadcastReceiver”>
 <intent-filter>
 <action android :name=“android.intent.action.BATTERY_LOW” />
 </intent-filter>
 </receiver>

Exemple d’inscription dynamique dans le code :

 IntentFilter filter  new IntentFilter(Intent.ACTION_BATERY_LOW) ;
 MyBroadcastReceiver receiver new MyBroadcastReceiver() ;
 registerReceiver(receiver,  filter) ;

2. Temps d’exécution limité :

  • Broadcast Receiver n’avais que 5 secondes environ pour accomplir la tâche.
  • Si une tâche prend plus de temps, comme le téléchargement de données ou le traitement de fichiers, nous vous recommandons de commencer Service ou d’utiliser WorkManager.

3. Tâches réalisables :

  • Envoyer des notifications : informez les utilisateurs des changements d’état, tels que la batterie faible ou les connexions Internet.
  • Démarrer le service : démarrez  le service pour effectuer des tâches en arrière-plan, telles que la synchronisation des données.
  • Mettre à jour les données : mettez à jour les données locales ou envoyez les données à un serveur.

Types d’intention de diffusion

Broadcast Intent peuvent être divisés en deux types :

1. Normal Broadcast :

  • Envoyé de manière asynchrone à tous les Broadcast Receiver enregistrés.
  • Exemple : ACTION_BOOT_COMPLETED (envoyé à la fin du démarrage de l’appareil).

2. Ordered Broadcast :

  • Envoyé séquentiellement à un Broadcast Receiver à la fois.
  • Broadcast Receiver pouvez modifier les résultats ou arrêter la propagation de Broadcast Intent.
  • Exemple : ACTION_NEW_OUTGOING_CALL (envoyé lorsqu’un utilisateur passe un appel sortant).

Exemples d’utilisation d’un récepteur de diffusion

1. Réagir aux changements de batterie :

  • Broadcast Receiver peut détecter quand la batterie de l’appareil est faible (ACTION_BATTERY_LOW) ou en charge (ACTION_BATTERY_OKAY).
  • Exemple : Envoi d’une notification à l’utilisateur lorsque la batterie est faible.

2. Répondre aux changements de connectivité réseau :

  • Broadcast Receiver peut détecter les changements de connexion Internet (ACTION_CONNECTIVITY_CHANGE).
  • Exemple : Affiche un message lorsqu’un appareil perd sa connexion Internet.

3. Répondre aux SMS entrants :

  • Broadcast Receiver peut détecter les SMS entrants (ACTION_SMS_RECEIVED).
  • Exemple : Affichez des notifications ou traitez automatiquement les SMS.

5. Service : Processus d’arrière-plan sans interface utilisateur

Service’est un composant essentiel d’une application Android qui vous permet d’exécuter des tâches en arrière-plan sans interface utilisateur. Service est idéal pour les tâches qui doivent continuer à s’exécuter même lorsque l’application est en panne, telles que la diffusion de musique, la synchronisation de données ou les mises à jour de localisation.

En utilisant Service, vous pouvez vous assurer que votre application continue de fonctionner correctement, même lorsque les utilisateurs n’interagissent pas directement avec l’application.

Types de services

Service peuvent être divisés en deux types principaux :

1.Started Service

Started Service est un type de Service qui est démarré par un autre composant, tel que Activity ou Broadcast Receiver, et qui continuera à s’exécuter jusqu’à ce que la tâche soit terminée.

Comment ça marche :

  • Started Service commence par l’appel de la méthode startService().
  • Service s’exécutera en arrière-plan jusqu’à ce que la tâche soit terminée ou arrêtée manuellement.
  • Une fois la tâche terminée, le Service s’arrêtera automatiquement.

Exemple de code :

Intent intent =new Intent(this,  MyStartedService.class) ;
startService(intent) ;

2. Bound Service

Bound Service est un type de Service qui se lie à d’autres composants, tels que Activity ou Fragment, et qui s’exécutera tant que ces composants seront actifs.

Comment ça marche :

  • Bound Service commence par appeler la méthode bindService().
  • Service fonctionnera tant qu’il y aura des composants qui y sont attachés.
  • Si tous les composants libèrent la liaison, le Service s’arrêtera automatiquement.

Exemple de code :

Intent intent =new Intent(this,MyBoundService.class) ;
bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE) ;

La différence entre le service démarré et le service lié

AspectsStarted ServiceBound Service
Comment commencerÀ partir de startService().Commençant par bindService().
DuréeS’exécute jusqu’à ce que la tâche soit terminée ou arrêtée.Fonctionne tant qu’il y a des composants attachés.
CommunicationImpossible de communiquer directement avec d’autres composants.Peut communiquer directement avec les composants collés.
Exemples d’utilisationStreaming musical, synchronisation de données.Lecteur de musique, communication en temps réel.

Exemples d’utilisation de services dans les applications

1. Applications musicales :

  • Started Service : Jouez de la musique en arrière-plan lorsque l’application est inactive.
  • Bound Service : Contrôlez la lecture de la musique à partir d’Activity ou de Fragment.

2. Applications sportives :

  • Started Service : Suit l’emplacement de l’utilisateur pendant la course ou le vélo.
  • Bound Service : Affiche les données de localisation et de vitesse en temps réel sur le Activity.

3. Application de chat :

  • Started Service : Envoyez et recevez des messages en arrière-plan.
  • Bound Service : Affiche les nouveaux messages en temps réel sur Activity.

6. Content Provider : Partage de données entre applications

Content Provider est un composant essentiel dans les applications Android qui permet aux applications de partager des données avec d’autres applications. En utilisant Content Provider, vous pouvez donner accès aux données de votre application, telles que les listes de contacts, les fichiers multimédias ou les bases de données, à d’autres applications.

Content Provider permet également à votre application d’accéder aux données d’autres applications, telles que l’accès à la liste de contacts ou à la galerie de photos d’un utilisateur.

Comment utiliser Content Provider

Content Provider fournit une interface standardisée pour l’accès et la manipulation des données. L’accès aux données s’effectue via URI (Uniform Resource Identifier) défini par le Content Provider.

1. Accès aux données à partir de Content Provider

Pour accéder aux données du Content Provider, vous devez utiliser les ContentResolver et les URI appropriés.

Exemple d’accès à une liste de contacts :

Uri uri = ContactsContract.Contacts.CONTENT_URI ;
Cursor cursor = getContentResolver().query(uri, null, null, null, null) ;
if (cursor  != null) {
  while (cursor.moveToNext()) {
  String name  cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)) ;
 Log.d(“Contact”, name) ;
 }
 cursor.close() ;
}

2. Ajouter, modifier ou supprimer des données

Vous pouvez également ajouter, modifier ou supprimer des données via Content Provider à l’aide de ContentResolver.

Ajout de données :

ContentValues values =new ContentValues() ;
values.put(ContactsContract.Contacts.DISPLAY_NAME, “John Doe”) ;
Uri newContactUri = getContentResolver().insert(ContactsContract.Contacts.CONTENT_URI, values) ;

Modification des données :

ContentValues values =new ContentValues() ;
values.put(ContactsContract.Contacts.DISPLAY_NAM, “Jane Doe”) ;
getContentResolver().update(ContactsContract.Contacts.CONTENT_URI, values, null, null) ;

Suppression des données :

getContentResolver().delete(ContactsContract.Contacts.CONTENT_URI, null, null) ;

Exemples d’  utilisation de Content Provider

1. Contacter l’application :

  • Content Provider permet à d’autres applications d’accéder à la liste de contacts de l’utilisateur.
  • Exemple : Une application de messagerie utilise un Content Provider pour sélectionner le contact du destinataire.

2. Application de galerie de photos :

  • Content Provider permet à d’autres applications d’accéder aux photos et vidéos stockées sur l’appareil.
  • Exemple : Une application de réseau social utilise un Content Provider pour sélectionner les photos à télécharger.

3. Application de calendrier :

  • Content Provider permet à d’autres applications d’accéder aux calendriers et aux événements du calendrier de l’utilisateur.
  • Exemple : Une application de rappel utilise un Content Provider pour ajouter des événements au calendrier.

7. Application Manifest : De la colle qui maintient les applications ensemble

Application Manifest est un fichier XML qui sert de « colle » qui maintient tous les composants d’une application Android ensemble. Ce fichier définit la structure de l’application, y compris Activity, Service, Broadcast Receiver et Content Provider, ainsi que les autorisations requises par l’application.

Le rôle important de Application Manifest

1. Définition des composants de l’application :

  • Activity : définit l’écran ou l’interface utilisateur.
  • Service : Définissez le processus d’arrière-plan.
  • Broadcast Receiver : Définit les composants qui répondent aux messages système.
  • Content Provider : Définir le mécanisme de partage des données.

Exemple de définition Activity  dans AndroidManifest.xml :

<activity android :name=“.MainActivity”>
 <intent-filter>
 <action android :name=“android.intent.action.MAIN” />
 <category android :name=“android.intent.category.LAUNCHER” />
 </intent-filter>
</activity>

2. Déclarer l’autorisation :

  • Les applications Android nécessitent une autorisation pour accéder à certaines fonctionnalités, telles que l’appareil photo, la localisation ou Internet.
  • Ce permis a été déclaré en AndroidManifest.xml.

Exemple de déclaration d’autorisation :

<uses-permission android :name=“android.permission.CAMERA” />
<uses-permission android :name=“android.permission.INTERNET” />

3. Définition des métadonnées d’application :

  • Application Manifest contient également des informations telles que le nom de l’application, l’icône, le thème et la version.

Exemple de métadonnées d’application :

 <application
 android :name=“.MyApplication”
 android :icon=“mipmap/ic_launcher”
 android :label=“string/app_name”
 android :theme=“style/AppTheme”>
</application>

8. Application Resources : Ressources pour l’interface utilisateur

L’application Android stocke des ressources telles que des chaînes, des images, des polices et des dispositions d’interface utilisateur dans le répertoire /res. Ces ressources sont gérées séparément du code du programme, ce qui vous permet de personnaliser facilement l’application pour différents appareils, langues et orientations d’écran.

Types de ressources

1. String : texte utilisé dans l’application, tel que les titres, les messages ou les étiquettes.

Stocké dans res/values/strings.xml.

Exemple:

<string name=“app_name”>My App</string>
<string name=“welcome_message”>Welcome to My App !</string>

2. Images : ressources visuelles telles que des icônes, des images d’arrière-plan ou des illustrations.

Stocké dans res/drawable/ ou res/mipmap/.

Exemples : ic_launcher.png, background.jpg.

3. (Layout) Layout : fichier XML qui définit la structure de l’interface utilisateur.

Stocké dans res/layout/.

Exemples : activity_main.xml, fragment_detail.xml.

4. Couleur : La définition de la couleur utilisée dans l’application.

Stocké dans res/values/colors.xml.

Exemple:

<color name=“primary_color”>6200EE</color>
<color name=“secondary_color”>03DAC6</color>

5. Dimensions : La taille et le rembourrage utilisés dans la mise en page.

Stocké dans res/values/dimens.xml.

Exemple:

<dimen name=“padding_small”>8dp</dimen>
<dimen name=“text_size_large”>24sp</dimen>

Accès aux ressources via la classe R

Lorsqu’une application est compilée, Android génère automatiquement une classe R qui contient des références à toutes les ressources définies dans le répertoire /res. Vous pouvez accéder à ces ressources via la classe R dans le code du programme.

Exemple d’accès aux chaînes de caractères :

String appName = getString(R.string.app_name) ;

Exemple d’accès aux images :

ImageView imageView =findViewById(R.id.my_image_view) ;
imageView.setImageResource(R.drawable.ic_launcher) ;

Exemple d’accès à une mise en page :

setContentView(R.layout.activity_main) ;

Conclusion

En comprenant les composants clés tels que Activity, Fragment, Intent et Service, vous pouvez créer des applications Android plus efficaces, modulaires et faciles à gérer. Chaque composant a un rôle spécifique qui permet à l’application de fonctionner correctement, à la fois au premier plan et en arrière-plan.

De plus, des composants tels que Broadcast Receiver et Content Provider permettent à votre application de réagir aux modifications du système et de partager des données avec d’autres applications.

En tirant parti de Application Manifest et Application Resources, vous pouvez définir la structure de votre application et gérer les ressources telles que les chaînes, les images et les mises en page de manière plus organisée.

Articles Récents