Autres Composants Avancés
Services, Broadcast Receivers, Content Providers
Formation Mobile
27 Aout au 1 Septembre 2015
Dr...
BROADCAST RECEIVERS
Autres Composants Avancés
Dr. Lilia SFAXI
www.liliasfaxi.wix.com/liliasfaxi
Slide 2
Definition
•  Un Broadcast Receiver est un composant qui répond à des annonces
diffusées pour tout le système
•  Plusieurs...
Broadcast Intent
•  Intent envoyé à toutes les applications qui ont souscrit à un
Broadcast Receiver
•  Envoyé par le syst...
Broadcast Receiver
•  Mécanisme avec lequel les applications peuvent répondre aux
Broadcast Intents
•  Doit être souscrit ...
Code: Broadcast Intent
•  Pour créer un Broadcast Intent, il faut:
•  Créer dans le listener de l’évènement qui va déclenc...
Code: Broadcast Receiver
•  Pour créer un Broadcast Receiver, il faut:
•  Créer un nouveau projet sans Activité
•  Dans vo...
Dr. Lilia SFAXI
www.liliasfaxi.wix.com/liliasfaxi
Slide 8
Broadcast Intent
activity_send_broadcast.xml
SendBroadcastActivi...
Dr. Lilia SFAXI
www.liliasfaxi.wix.com/liliasfaxi
Slide 9
Broadcast Receiver
MyReceiver.java
AndroidManifest.xml
Broadcast...
Dr. Lilia SFAXI
www.liliasfaxi.wix.com/liliasfaxi
Slide 10
Broadcast Receiver: Comportement
Dr. Lilia SFAXI
www.liliasfaxi.wix.com/liliasfaxi
Slide 11
Broadcast Receiver: Comportement
CONTENT PROVIDER
Autres Composants Avancés
Dr. Lilia SFAXI
www.liliasfaxi.wix.com/liliasfaxi
Slide 12
Content Provider
•  Gère l’accès à des données structurées
•  Implémente un mécanisme pour le partage de données entre
app...
Quand implémenter un Content Provider?
•  Vous avez besoin d’un Content Provider quand vous voulez:
•  Offrir des données ...
Content Provider: Etapes
1.  Concevoir votre espace de stockage pour vos données. Il peut être
sous la forme de:
•  Fichie...
Code: Content Provider
•  Pour accéder aux données d’un content provider, utiliser un
ContentResolver dans le contexte de ...
SERVICES
Autres Composants Avancés
Dr. Lilia SFAXI
www.liliasfaxi.wix.com/liliasfaxi
Slide 17
Service
•  Processus qui tourne en arrière plan et n’a pas d’interface
•  Peut être démarré et géré à partir d’activités, ...
Types de Services
•  Deux utilisations de services
•  Local vs global
•  Started vs Bound
•  Cycle de vie spécifique aux s...
Cycle de Vie d’un Service
Dr. Lilia SFAXI
www.liliasfaxi.wix.com/liliasfaxi
Slide 20
Services
Started Service Bound Service
Services « Started »
•  Démarré par un autre composant de l’application (ex
Activity) suite à l’appel de startService() et...
Services « Bound »
•  Un composant de l’application se connecte à ce service en
appelant bindService()
•  Un service Bound...
Services « Mixtes »
•  Un service peut être à la fois Started et Bound
•  Started
•  S’exécute indéfiniment
•  Implémente ...
Intent Service
•  Classe utilitaire
•  Sous-classe de Service
•  Lance un « worker thread » pour gérer les tâches en arriè...
Services et Threads
•  Par défaut, un service s’exécute dans le thread principal du processus
qui le contient
•  Si le ser...
Services ou Threads ?
•  Un service est simplement un composant qui peut fonctionner en arrière-
plan même si l'utilisateu...
Prochain SlideShare
Chargement dans…5
×

P6 composants avancés

2 589 vues

Publié le

Visitez http://liliasfaxi.wix.com/liliasfaxi !

Publié dans : Technologie
0 commentaire
2 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
2 589
Sur SlideShare
0
Issues des intégrations
0
Intégrations
786
Actions
Partages
0
Téléchargements
65
Commentaires
0
J’aime
2
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

P6 composants avancés

  1. 1. Autres Composants Avancés Services, Broadcast Receivers, Content Providers Formation Mobile 27 Aout au 1 Septembre 2015 Dr. Lilia SFAXI www.liliasfaxi.wix.com/liliasfaxi Slide 1
  2. 2. BROADCAST RECEIVERS Autres Composants Avancés Dr. Lilia SFAXI www.liliasfaxi.wix.com/liliasfaxi Slide 2
  3. 3. Definition •  Un Broadcast Receiver est un composant qui répond à des annonces diffusées pour tout le système •  Plusieurs broadcasts sont originaires du système, par ex: •  Annonce que l’écran est éteint •  Le niveau de la batterie est bas •  Une photo a été prise… •  D’autres sont initiés par des applications •  Par ex, annoncer à une autre application que des données ont été téléchargées et disponibles pour être utilisées •  N’ont pas d’interface, mais… •  Peuvent afficher une notification dans la barre de statut pour alerter l’utilisateur Dr. Lilia SFAXI www.liliasfaxi.wix.com/liliasfaxi Slide 3 Broadcast Receivers
  4. 4. Broadcast Intent •  Intent envoyé à toutes les applications qui ont souscrit à un Broadcast Receiver •  Envoyé par le système Android, par exemple, pour indiquer les changements de l’appareil •  Démarrage terminé, connexion à un appareil externe ou écran allumé/éteint •  Peut être: •  Normal (ou asynchrone): envoyé à tous les Broadcast Receivers en même temps •  Ordonné: envoyé à un receiver, qui peut, soit le tuer, soit le passer à un autre Broadcast Receiver Dr. Lilia SFAXI www.liliasfaxi.wix.com/liliasfaxi Slide 4 Broadcast Receivers
  5. 5. Broadcast Receiver •  Mécanisme avec lequel les applications peuvent répondre aux Broadcast Intents •  Doit être souscrit par une application, et configuré dans un Intent Filter, pour indiquer le type de broadcast auquel elle est intéressée. •  Quand un intent correspondant est diffusé •  Le Broadcast Receiver est invoqué par l’environnement d’exécution Android, même si l’application intéressée n’est pas démarrée •  Le Broadcast Receiver a 5 secondes pour compléter les tâches qu’il a à faire •  Lancement d’un service, mise à jour de données ou notification à un utilisateur •  S’exécute en arrière plan et n’a pas d’interface utilisateur Dr. Lilia SFAXI www.liliasfaxi.wix.com/liliasfaxi Slide 5 Broadcast Receivers
  6. 6. Code: Broadcast Intent •  Pour créer un Broadcast Intent, il faut: •  Créer dans le listener de l’évènement qui va déclencher le broadcast: •  Un nouvel intent i •  Définir une action pour cet intent avec la méthode i.setAction •  Déclencher le broadcast avec la méthode sendBroadcast(i) Dr. Lilia SFAXI www.liliasfaxi.wix.com/liliasfaxi Slide 6 Broadcast Receivers
  7. 7. Code: Broadcast Receiver •  Pour créer un Broadcast Receiver, il faut: •  Créer un nouveau projet sans Activité •  Dans votre projet, choisir New -> Other -> Broadcast Receiver •  Vous remarquerez que: •  Une nouvelle classe étendant BroadcastReceiver a été créée •  Un nouvel élément receiver a été rajouté à votre fichier Manifest •  Implémenter la méthode onReceive de votre receiver, qui indiquera le comportement à adopter à la réception de l’évènement diffusé •  Ajouter dans le fichier Manifest pour ce receiver, sous l’élément « intent filters », l’action que vous avez précédemment associé au Broadcast Intent Dr. Lilia SFAXI www.liliasfaxi.wix.com/liliasfaxi Slide 7 Broadcast Receivers
  8. 8. Dr. Lilia SFAXI www.liliasfaxi.wix.com/liliasfaxi Slide 8 Broadcast Intent activity_send_broadcast.xml SendBroadcastActivity.java
  9. 9. Dr. Lilia SFAXI www.liliasfaxi.wix.com/liliasfaxi Slide 9 Broadcast Receiver MyReceiver.java AndroidManifest.xml Broadcast Intent Prédéfini: au déclenchement du mode Avion
  10. 10. Dr. Lilia SFAXI www.liliasfaxi.wix.com/liliasfaxi Slide 10 Broadcast Receiver: Comportement
  11. 11. Dr. Lilia SFAXI www.liliasfaxi.wix.com/liliasfaxi Slide 11 Broadcast Receiver: Comportement
  12. 12. CONTENT PROVIDER Autres Composants Avancés Dr. Lilia SFAXI www.liliasfaxi.wix.com/liliasfaxi Slide 12
  13. 13. Content Provider •  Gère l’accès à des données structurées •  Implémente un mécanisme pour le partage de données entre applications •  Toute application peut fournir aux autres applications un accès à ses données sous-jacentes via l’implémentation d’un Content Provider permettant d’ajouter, supprimer et lancer des requêtes sur les données •  Définit des URI pour l’accès aux données •  Données peuvent être partagées sous forme de fichier ou de base de données SQLite •  Existence de Content Providers standards dans le runtime Android pour accès aux données: Contacts ou Fichiers Média Dr. Lilia SFAXI www.liliasfaxi.wix.com/liliasfaxi Slide 13 Content Providers
  14. 14. Quand implémenter un Content Provider? •  Vous avez besoin d’un Content Provider quand vous voulez: •  Offrir des données complexes ou des fichiers à d’autres applications •  Permettre aux utilisateurs de copier des données complexes vers d’autres applications •  Fournir des suggestions de recherche pour votre application en utilisant le framework de recherche •  Vous n’avez pas besoin d’un Content Provider : •  Pour utiliser une base de données SQLite, si l’utilisation est entièrement interne à votre application Dr. Lilia SFAXI www.liliasfaxi.wix.com/liliasfaxi Slide 14 Content Providers
  15. 15. Content Provider: Etapes 1.  Concevoir votre espace de stockage pour vos données. Il peut être sous la forme de: •  Fichiers •  Photos, audio ou vidéos •  Les stocker dans l’espace privé de votre application •  Données Structurées •  Données dans des bases de données, tableaux… •  Stocker les données dans une forme compatible avec des tables de lignes/ colonnes 2.  Définir une implémentation concrète du ContentProvider et ses méthodes requises 3.  Définir les URIs, les noms de colonnes du provider, les intent actions, les permissions… Dr. Lilia SFAXI www.liliasfaxi.wix.com/liliasfaxi Slide 15 Content Providers
  16. 16. Code: Content Provider •  Pour accéder aux données d’un content provider, utiliser un ContentResolver dans le contexte de votre application •  Communique avec l’objet Provider (une instance de la classe implémentant ContentProvider) •  L’objet provider reçoit des requêtes des clients, les exécute et retourne le résultat •  Implémenter les méthodes suivantes de ContentProvider •  query(): extraction de données du provider •  insert(): insertion d’une nouvelle ligne dans votre provider •  update(): modification d’une ligne existante de votre provider •  delete(): suppression d’une ligne de votre provider •  getType(): retourne le type MIME correspondant à un URI •  onCreate(): initialisation du provider Dr. Lilia SFAXI www.liliasfaxi.wix.com/liliasfaxi Slide 16 Content Providers
  17. 17. SERVICES Autres Composants Avancés Dr. Lilia SFAXI www.liliasfaxi.wix.com/liliasfaxi Slide 17
  18. 18. Service •  Processus qui tourne en arrière plan et n’a pas d’interface •  Peut être démarré et géré à partir d’activités, de Broadcast Receivers ou autres services •  Idéal pour des situations où une application a besoin de continuer à réaliser des tâches sans avoir besoin d’une interface visible pour l’utilisateur •  Peut notifier les utilisateurs d’évènements grâce aux notifications et toasts •  Peut lancer des Intents •  Services ont une plus forte priorité que les autres processus et sont terminés en dernier par le système, s’il a besoin de ressources •  Le service sera redémarré automatiquement dès que les ressources nécessaires sont disponibles à nouveau Dr. Lilia SFAXI www.liliasfaxi.wix.com/liliasfaxi Slide 18 Services
  19. 19. Types de Services •  Deux utilisations de services •  Local vs global •  Started vs Bound •  Cycle de vie spécifique aux services (quelque soit leur type) •  Services « Locaux » •  Service personnel, inaccessible pour les autres applications •  Service, Intent, IntentService •  En accès restreint •  Peu utilisés en pratique •  Services « Distants » •  Accessible aux autres applications •  Langage commun AIDL pour définir les interfaces •  Recherche du service, IBinder, Connection Dr. Lilia SFAXI www.liliasfaxi.wix.com/liliasfaxi Slide 19 Services
  20. 20. Cycle de Vie d’un Service Dr. Lilia SFAXI www.liliasfaxi.wix.com/liliasfaxi Slide 20 Services Started Service Bound Service
  21. 21. Services « Started » •  Démarré par un autre composant de l’application (ex Activity) suite à l’appel de startService() et implémente onStartCommand() •  Une fois démarré, il peut s’exécuter indéfiniment en arrière plan •  Même si le composant qui l’a démarré est détruit •  En général : Réalise une seule opération et ne retourne pas de résultat au processus qui l’a déclenché •  Le service doit se terminer explicitement: •  Soit lui-même : appel à stopSelf() •  Soit par une application cliente : appel à stopService() •  Exemple : service de téléchargement / upload de fichiers Dr. Lilia SFAXI www.liliasfaxi.wix.com/liliasfaxi Slide 21 Services Voir Exemple : ServiceExample
  22. 22. Services « Bound » •  Un composant de l’application se connecte à ce service en appelant bindService() •  Un service Bound offre une interface qui permet à ses clients d’interagir avec lui •  Envoyer des requêtes / Recevoir des réponses •  Même s’il est sur un autre processus à via IPC •  S ’exécute uniquement quand un autre composant de l’application est connecté à lui •  Plusieurs composants peuvent se connecter au service en même temps •  Le service est détruit quand tous les composants se déconnectent •  Destruction automatique par le système Android •  Exemple: •  Lecture d’un fichier MP3, et commande d’arrêt/pause/replay… via l’interface Dr. Lilia SFAXI www.liliasfaxi.wix.com/liliasfaxi Slide 22 Services Android Voir Exemple : RemoteBoundService
  23. 23. Services « Mixtes » •  Un service peut être à la fois Started et Bound •  Started •  S’exécute indéfiniment •  Implémente la méthode onStartCommand() •  Bound •  Est relié à un composant (activité ou autre) •  Implémente la méthode onBind() •  Dans tous les cas (Started, Bound ou Mixte) •  Par défaut, tout composant, même à partir d’une autre application, peut lancer un service grâce aux Intents •  Il est possible de déclarer un service comme étant Privé à l’application •  Dans le Manifest Dr. Lilia SFAXI www.liliasfaxi.wix.com/liliasfaxi Slide 23 Services Android
  24. 24. Intent Service •  Classe utilitaire •  Sous-classe de Service •  Lance un « worker thread » pour gérer les tâches en arrière plan de manière asynchrone •  Les requêtes sont stockées dans des queues (files d’attente) et traitées séquentiellement (dans leur ordre d’arrivée) •  Une opération lancée dans un IntentService ne peut pas être interrompue •  Quand toutes les requêtes sont exécutées, le thread termine •  On doit implémenter la méthode onHandleIntent •  Code à exécuter pour chaque requête Dr. Lilia SFAXI www.liliasfaxi.wix.com/liliasfaxi Slide 24 Services Android Voir Exemple : ServiceExample
  25. 25. Services et Threads •  Par défaut, un service s’exécute dans le thread principal du processus qui le contient •  Si le service réalise des opérations de calcul intensif ou des opérations bloquantes (lecture mp3, communication réseau) le développeur doit (explicitement) créer un nouveau thread pour le service pour réaliser ces tâches •  Sauf dans le cas d’un IntentService, qui tourne par défaut sur son propre worker thread •  Objectifs : •  Garder le thread principal réactif vis à vis des interactions avec l’utilisateur •  Réduire le risque du problème : Application Not Responding (ANR) Dr. Lilia SFAXI www.liliasfaxi.wix.com/liliasfaxi Slide 25 Services
  26. 26. Services ou Threads ? •  Un service est simplement un composant qui peut fonctionner en arrière- plan même si l'utilisateur n'interagit pas avec votre application. •  On doit créer un service uniquement pour cet objectif •  Si le besoin est d'effectuer un travail en dehors du thread principal, mais seulement pendant que l'utilisateur interagit avec l’application à Il est recommandé de créer un nouveau thread et non pas un service •  Exemple ( jouer de la musique uniquement quand votre activité s’exécute): •  Créer un thread dans onCreate () •  Commencer à l’exécuter dans onStart () •  Puis l'arrêter dans onStop (). •  Rappel : un service fonctionne par défaut dans le thread principal de l'application •  Il faut toujours créer un nouveau thread dans le service s’il effectue des opérations intensives ou bloquantes. Dr. Lilia SFAXI www.liliasfaxi.wix.com/liliasfaxi Slide 26 Services

×