Académique Documents
Professionnel Documents
Culture Documents
• Un smartphone, ordiphone ou téléphone intelligent, est un téléphone mobile disposant aussi des fonctions d'un assistant numérique
personnel (PDA) ;
• La saisie des données se fait par le biais d'un écran tactile ou d'un clavier ;
• Il fournit des fonctionnalités basiques comme : l'agenda, le calendrier, la navigation sur le web, la consultation de courrier électronique, de
messagerie instantanée, le GPS, etc.
2
1 Introduction à la programmation Mobile
1.1 Présentation des systèmes d’exploitation mobile
Nombre de smartphones vendus aux utilisateurs Top 5 des marques de téléphone les plus vendues en
finaux dans le monde de 2007 à 2021 premier trimestre de 2021
En 2021, les vendeurs de smartphones ont vendu environ 1,43 Presque 350 millions de smartphones ont été vendus en premier
milliard de smartphones dans le monde. trimestre de 2021 dans le monde, selon l’analyste Canalys. Des
ventes en hausse de 27 % par rapport à l’année 2020, marquée
négativement par la Covid-19.
© Statista 2022
3
1 Introduction à la programmation Mobile
1.1 Présentation des systèmes d’exploitation mobile
© Statista 2022
4
1 Introduction à la programmation Mobile
1.1 Présentation des systèmes d’exploitation mobile
Quelques
domaines
d’utilisation
Réseaux
Shopping
sociaux
Communi
Cuisine
cation
5
1 Introduction à la programmation Mobile
1.1 Présentation des systèmes d’exploitation mobile
• Un logiciel libre (open source) est un logiciel informatique dont le code source est librement accessible, modifiable et partageable. Le
développement collaboratif et le partage des compétences informatiques sont généralement associés aux communautés de développeurs
Open Source.
• L'une des principales différences, opposant les logiciels libres aux logiciels propriétaires, est que le code source de ces derniers est "fermé". En
effet, l'accès au code source est impossible ou très limité. Cela signifie que les utilisateurs paient une licence juste pour utiliser le logiciel, tel
• Par exemple, comparons deux systèmes d'exploitation professionnels que vous connaissez bien : Microsoft Windows est un logiciel
propriétaire, tandis que RedHat Enterprise Linux est un logiciel libre. Tous deux sont très populaires et largement utilisés dans les entreprises de
nos jours.
6
1 Introduction à la programmation Mobile
1.1 Présentation des systèmes d’exploitation mobile
Un système d'exploitation mobile est un système d'exploitation qui permet d'exécuter d'autres logiciels d'application sur des appareils mobiles. Il
s'agit du même type de logiciel que les célèbres systèmes d'exploitation pour ordinateurs tels que Linux et Windows, mais ils sont désormais plus
légers et plus simples dans une certaine mesure.
• Un système d'exploitation mobile est un système d'exploitation embarqué conçu pour fonctionner sur un appareil mobile. Ce type de système
d'exploitation se concentre entre autres sur la gestion de la connectivité sans fil et celle des différents types d'interface.
• Les systèmes d'exploitation que l'on trouve sur les smartphones comprennent Symbian OS, iPhone OS, BlackBerry de RIM, Windows Mobile,
Palm WebOS, Android et Maemo. Android, WebOS et Maemo sont tous dérivés de Linux. L'iPhone OS est issu de BSD et NeXTSTEP, qui sont liés
à Unix.
Les dispositifs mobiles ont des contraintes et des restrictions sur leur caractéristique physique telles que :
• la taille de l'écran ;
• la mémoire ;
Ainsi, ils ont besoin de différents types de systèmes d'exploitation en fonction des capacités qu'ils supportent. Par exemple, un OS PDA est
différent d'un système d'exploitation de Smartphone.
Un système d'exploitation mobile est un logiciel embarqué responsable de la gestion des opérations, du contrôle, de la coordination de
l'utilisation du matériel entre les différents programmes d'application et le partage des ressources d'un dispositif mobile.
8
1 Introduction à la programmation Mobile
1.1 Présentation des systèmes d’exploitation mobile
système d'exploitation mobile basé sur le noyau Linux et les logiciels libres. Le système d'exploitation Android a été développé par Google. Le
• Bada (Samsung Electronics) : Bada est un système d'exploitation mobile de Samsung qui a été lancé en 2010. Le Samsung wave a été le
premier mobile à utiliser le système d'exploitation Bada. Le système d'exploitation Bada offre de nombreuses fonctionnalités mobiles, telles
• Windows Mobile OS : Le système d'exploitation Windows Mobile OS est un système d'exploitation mobile qui a été développé par Microsoft.
• iPhone OS / iOS : L'iOS a été développé par la société Apple pour être utilisé sur ses appareils. Le système d'exploitation iOS parmi les
systèmes d'exploitation les plus populaire aujourd'hui. C'est un système d'exploitation très sûr. Le système d'exploitation iOS n'est pas
Présentation d’Android
• Système d'exploitation mobile basé sur le noyau Linux ;
• Il a été développé par l'Open Handset Alliance, qui était dirigée par Google et d'autres entreprises ;
• Le système d'exploitation Android est basé sur Linux et peut être programmé en C/C++, mais la plupart des applications sont développées en
Java (Java accède aux bibliothèques C via JNI, abréviation de Java Native Interface) ;
• Open source. 10
1 Introduction à la programmation Mobile
1.1 Présentation des systèmes d’exploitation mobile
11
1 Introduction à la programmation Mobile
1.1 Présentation des systèmes d’exploitation mobile
Dispositifs mobiles
Développement d'applications
Application web progressive
multiplateformes
13
1 Introduction à la programmation Mobile
1.2 Approches de développement mobile
• Les applications natives sont des applications spécifiquement développées pour un système d'exploitation.
• Les systèmes d'exploitation les plus connus pour le mobile sont iOS et Android.
• Si vous souhaitez développer une application native compatible avec iOS et Android, il faudra développer deux applications complètement
différentes :
14
1 Introduction à la programmation Mobile
1.2 Approches de développement mobile
15
1 Introduction à la programmation Mobile
1.2 Approches de développement mobile
16
1 Introduction à la programmation Mobile
1.2 Approches de développement mobile
• Une application mobile hybride est une application dont le code source permet de générer deux applications : l’une pour Android et l’autre
pour iOS.
• Elle s’appuie pour cela sur des technologies « Web » telles que le Javascript, HTML ou encore CSS.
• Son contenu s’exécute dans un « conteneur » natif, une webview (c’est-à-dire une page internet), grâce à un Framework (Cordova, Capacitor),
pour pouvoir être utilisée comme une application native.
• Il s’agit donc, comme toute application Web, d’un code « interprété » qui nécessite d’être traduit par la machine à chaque exécution, ce qui
réduit la performance de l’application.
17
1 Introduction à la programmation Mobile
1.2 Approches de développement mobile
18
1 Introduction à la programmation Mobile
1.2 Approches de développement mobile
19
1 Introduction à la programmation Mobile
1.2 Approches de développement mobile
• Cependant, contrairement aux applications hybrides dont le code s’exécute dans une « webview » native, les applications cross-platform
produisent un même code source qui, compilé, produit deux applications natives. Cela induit une meilleure performance et une expérience
utilisateur plus proche du natif.
• Les technologies utilisées pour développer une application cross-platform sont Flutter, Appcelerator, Titanium, Xamarin, React Native ou encore
Kotlin multiplateforme.
20
1 Introduction à la programmation Mobile
1.2 Approches de développement mobile
21
1 Introduction à la programmation Mobile
1.2 Approches de développement mobile
• Avec l'approche de développement web, l’application s'exécute dans le navigateur du terminal mobile et utilise les technologies web standard
telles que HTML5, CSS3 et JavaScript.
• Les applications web mobiles n'ont pas accès aux fonctions de la plateforme car elles reposent uniquement sur le navigateur et sur les normes
web associées.
• Les applications web mobiles ne sont pas distribuées via un magasin d'applications. Elles sont accessibles via un lien sur un site Web ou un
signet dans le navigateur du terminal mobile de l'utilisateur.
23
1 Introduction à la programmation Mobile
1.2 Approches de développement mobile
24
1 Introduction à la programmation Mobile
1.2 Approches de développement mobile
25
1 Introduction à la programmation Mobile
1.2 Approches de développement mobile
Critères pour sélectionner une approche afin de développer une application mobile
* *
** **
Réf : inflexsys
* : Moyennant un effort de développement supplémentaire pour adapter l'application aux standards de navigation spécifiques à chaque OS
** : Moyennant des montées de versions plus fréquentes
26
2 Architecture Android SDK
Présentation de l’architecture Android
5. Noyau Linux.
•
Exemple :
• Votre application peut utiliser une application système pour délivrer un message SMS ou passer un appel téléphonique.
28
2 Architecture Android SDK
L'ensemble des fonctionnalités du système d'exploitation Android est mis à votre disposition par le biais d'API écrites en langage Java :
• Hiérarchie des classes de vue pour créer des écrans d'interface utilisateur ;
• Gestionnaire de notifications ;
Activity Manager Window Manager Content Provider View System Package Manager
29
2 Architecture Android SDK ANDROID RTUNTIME
Core Libraries
Android RT Dalvik VM
Chaque application s'exécute dans son propre processus avec sa propre instance du Runtime Android.
Bien qu'Android soit développé en Java, la couche d'exécution de l'architecture Android est constituée de la machine virtuelle Dalvik (DVM), des
bibliothèques Java de base et, récemment, d'une nouvelle machine virtuelle appelée Android runtime (ART).
La DVM exécute des applications programmées en Java. La DVM ne prétend pas être une machine virtuelle Java (JVM) pour des raisons de
licence, mais elle remplit la même fonction. La raison en est que Dalvik est optimisé pour fonctionner sur des appareils de petite taille avec une
mémoire limitée. Pour des raisons de performances, la DVM n'est démarrée qu'une seule fois. Chaque nouvelle instance de celle-ci est clonée
par un service système appelé Zygote. Le schéma suivant présente la structure du runtime Android :
30
2 Architecture Android SDK
Les bibliothèques C/C++ de base donnent accès aux principaux composants et services natifs du système Android.
Bibliothèques
libc
31
2 Architecture Android SDK
Interfaces standard qui exposent les capacités matérielles des dispositifs sous forme de bibliothèques.
Android Framework
Native Libraires
HAL
Linux Kernel
32
2 Architecture Android SDK
Noyau Linux
Display Driver Camera Driver Audio Driver Bindler (IPC) Driver Flash Memory Driver
Process Management Wifi Driver Bluetooth Driver Memory Mangement Power Management
33
3 Activity
Création d’une Activity
34
3 Activity
Création d’une Activity
View
Si vous regardez votre appareil mobile, chaque élément de l'interface utilisateur que
vous voyez est une View.
Views
35
3 Activity
Création d’une Activity
View
36
3 Activity
Création d’une Activity
Button CheckBox
EditText RadioButton
Slider Switch
37
3 Activity
Création d’une Activity
Attributs de View
• Peut avoir le focus (c'est-à-dire être sélectionné pour recevoir les entrées de l'utilisateur) ;
38
3 Activity
Création d’une Activity
• Éditeur XML ;
• Code Java.
39
3 Activity
Création d’une Activity
3. Volet Palette ;
6. Onglet Attributs.
40
3 Activity
Création d’une Activity
<TextView
android:id="@+id/show_count"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/myBackgroundColor"
android:text="@string/count_initial_value"
android:textColor="@color/colorPrimary"
android:textSize="@dimen/count_text_size"
android:textStyle="bold"
/>
41
3 Activity
Création d’une Activity
android:<property_name>="<property_value>"
Exemple: android:layout_width="match_parent"
android:<property_name>="@<resource_type>/resource_id"
Exemple: android:text="@string/button_label_next"
android:<property_name>="@+id/view_id"
Exemple: android:id="@+id/show_count"
42
3 Activity
Création d’une Activity
View en JAVA
context
Dans l’Activity:
Context est une interface permettant d'obtenir des informations globales sur l'environnement d'une application.
Obtenez le Context :
Context context = getApplicationContext() ;
Une activité est son propre contexte : TextView myText = new TextView(this).
43
3 Activity
Création d’une Activity
Une activité, vis-à-vis du code, est séparée en 2 morceaux: un fichier XML, et un fichier
JAVA.
Le fichier XML :
• Interface graphique de l’activity ;
• Conception de l’IHM : design et ergonomie ;
• Déclaration des éléments graphiques : View, Buttons, Layouts, …etc ;
• Déclaration des identifiants des éléments graphiques.
Le fichier Java
• Le contrôle des éléments déclarés dans le fichier XML ;
• Chaque activity est liée à un seul et unique fichier XML qui définit son interface
graphique.
44
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
• Rendu de la vue :
46
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
• Rendu de la vue :
47
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
• ConstraintLayout : Positionne les éléments de l'interface utilisateur en utilisant des connexions de contrainte avec d'autres éléments et avec
• RecyclerView : Contient une liste d'éléments et permet le défilement en ajoutant et en supprimant des éléments de manière dynamique.
48
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
Layouts :
• Peuvent se trouver dans une ligne, une colonne, une grille, un tableau, …
49
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
50
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
• La hiérarchie des classes des views est l'héritage standard des classes orientées
• Par exemple, un bouton est un TextView est une View est un objet.
ViewGroup
• Relation superclasse-sous-classe.
51
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
52
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
53
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
... />
<TextView
... />
<Button
... />
</LinearLayout> 54
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
Layout créé en JAVA
linearL.setOrientation(LinearLayout.VERTICAL);
myText.setText("Afficher le text!");
linearL.addView(myText);
setContentView(linearL);
LinearLayout.LayoutParams layoutParams =
new Linear.LayoutParams(
LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_CONTENT);
55
myView.setLayoutParams(layoutParams);
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
LinearLayout
Ce layout se charge de mettre les vues sur une même ligne, selon une certaine
orientation ».
• verticale pour que les composants soient placés de haut en bas (en colonne) ;
• Horizontale pour que les composants soient placés de gauche à droite (en
ligne).
56
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
LinearLayout
Démo 1 : Réaliser l’interface suivante :
57
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
LinearLayout
TextView
Parent
LinearLayout
1st Child
LinearLayout
2nd Child
LinearLayout EditText
TextView
Button
58
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
parentale ;
59
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
ConstraintLayout
• ViewGroup qui offre une grande flexibilité pour la conception de la mise en page ;
• Fournit des contraintes pour déterminer la position et l'alignement des éléments de l'interface utilisateur ;
• La contrainte est une connexion à une autre vue, un layout parente ou une ligne directrice invisible.
60
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
Autoconnect
désactivée ;
parent.
63
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
1. Poignée de redimensionnement ;
3. Poignée de contrainte ;
64
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
élément.
65
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
Volet Attributs
66
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
layout_height ;
largeur de la vue ;
67
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
Layout_width et layout_height
68
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
• Cliquez en haut ou sur Afficher d'autres attributs en bas pour voir et modifier d'autres attributs.
69
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
70
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
2. Choisissez le dispositif.
71
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
72
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
73
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
Événements
74
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
Gestionnaires d'événements
• Une méthode, appelée gestionnaire d'événement, est déclenchée par un événement spécifique et agit en réponse à cet événement.
75
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
button.setOnClickListener(new View.OnClickListener() {
toast.show();
});
76
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
Ressources
77
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
78
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
• Layout :
R.layout.activity_main
setContentView(R.layout.activity_main);
• View :
R.id.recyclerview
rv = (RecyclerView) findViewById(R.id.recyclerview);
• String :
In Java: R.string.title
In XML: android:text="@string/title"
79
4 Activity (Les widgets)
Réalisation d’une interface graphique simple avec du XML
Dimensions
80
5 L’intent
Communication basique entre les écrans
• Les Intents
Les objets de type Intent permettant de faire communiquer vos activités entre elles, et avec des services.
• Une activité de votre application lance une seconde activité de votre programme (ou d'un autre programme Android) ;
• Une activité de votre application lance un service de votre programme (ou d'un autre programme) ;
• Un broadcast receiver reçoit un intent de l'OS lui-même ou d'une autre application (type l'utilisateur vient de changer la langue ou le
time zone).
Sur nos boutons déclenchant une action, il faut créer un intent pointant vers l'activité voulue et lancer l'activité.
on fournit à l'intent les paramétres afin que l'activité recevant l'intent ait ces informations :
intent.putExtra(EXTRA_LOGIN, strUserName);
83
5 L’intent
Navigation Screen 2
@Override Intent i = getIntent();
public void onClick(View v) {
Serializable s = getIntent().getSerializableExtra("data");
final Context context = this;
Intent intent = new Intent(context, Screen2.class); if (s != null) {
HashMap<String, String> data = new HashMap<>(); HashMap data = (HashMap) s;
• L'ensemble des états dans lesquels une activité peut se trouver au cours de sa vie, depuis sa création jusqu'à sa destruction.
• Plus formellement :
• Un cycle de vie est un graphe dirigé contenant tous les états dans lesquels une activité peut se trouver, ainsi que les rappels associés à
Réf
85
6 Connaitre le cycle de vie des composants applicatifs
Et par les changements de configuration tels que la rotation du dispositif ou l'action du système.
86
6 Connaitre le cycle de vie des composants applicatifs
onStop() - n'est plus visible, mais existe toujours et toutes les informations d'état sont conservées
87
6 Connaitre le cycle de vie des composants applicatifs
88
6 Connaitre le cycle de vie des composants applicatifs
• Appelé lorsque l'activité est créée pour la première fois, par exemple lorsque l'utilisateur touche l'icône du lanceur
• Effectue toute la configuration statique : création des vues, liaison des données aux listes...
• onCreate(Bundle savedInstanceState) :
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// L'activité est en cours de création.
89
}
6 Connaitre le cycle de vie des composants applicatifs
• Suivi de onResume() si l'activité passe au premier plan, ou de onStop() si elle devient cachée
@Override
protected void onStart() {
super.onStart();
// L'activité est sur le point de devenir visible.
}
90
6 Connaitre le cycle de vie des composants applicatifs
• État transitoire ;
@Override
protected void onRestart() {
super.onRestart();
// L'activité se situe entre l'arrêt et le démarrage.
}
91
6 Connaitre le cycle de vie des composants applicatifs
• État d'exécution
@Override
protected void onResume() {
super.onResume();
// L'activité est devenue visible
// Elle est maintenant "reprise".
}
92
6 Connaitre le cycle de vie des composants applicatifs
• Appelé lorsque le système est sur le point de reprendre une activité précédente
• Généralement utilisé pour valider les modifications non sauvegardées des données persistantes, arrêter les animations et tout ce qui
• Les implémentations doivent être rapides car l'activité suivante n'est pas reprise avant le retour de cette méthode
• Suivi par onResume() si l'activité revient à l'avant, ou onStop() si elle devient invisible pour l'utilisateur
@Override
protected void onPause() {
super.onPause();
// Une autre activité est en train de prendre le focus
// Cette activité est sur le point d'être "mise en
pause".
93
}
6 Connaitre le cycle de vie des composants applicatifs
• Une nouvelle activité est lancée, une activité existante est placée devant celle-ci ou celle-ci est détruite
• Suivie par onRestart() si l'activité revient pour interagir avec l'utilisateur, ou onDestroy() si l'activité disparaît
@Override
protected void onStop() {
super.onStop();
// L'activité n'est plus visible
// elle est maintenant "arrêtée".
}
94
6 Connaitre le cycle de vie des composants applicatifs
• Le système peut détruire l'activité sans l'appeler, alors utiliser onPause() ou onStop() pour sauvegarder les données ou l'état
@Override
protected void onDestroy() {
super.onDestroy();
// L'activité est sur le point d'être détruite.
}
95
6 Connaitre le cycle de vie des composants applicatifs
Les changements de configuration invalident la disposition actuelle ou d'autres ressources de l'activité lorsque l'utilisateur :
• Choisit une langue système différente, ce qui entraîne une modification des paramètres locaux
96
6 Connaitre le cycle de vie des composants applicatifs
• onPause() • onCreate()
• onStop() • onStart()
• onDestroy() • onResume()
97
6 Connaitre le cycle de vie des composants applicatifs
• Les informations sur l'état sont créées pendant que l'activité est en cours, comme un compteur, un texte utilisateur, une progression de
l'animation;
• La langue change
98
6 Connaitre le cycle de vie des composants applicatifs
• L'état des vues avec un ID unique (android:id), comme le texte saisi dans EditText
• L’utilisateur est responsable de la sauvegarde des autres activités et des données de progression de l'utilisateur
• Appelée par le runtime Android lorsqu'il y a une possibilité que l'activité soit détruite
• Sauvegarde les données uniquement pour cette instance de l'activité pendant la session en cours
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mShowCount = findViewById(R.id.show_count);
if (savedInstanceState != null) {
String count = savedInstanceState.getString("count");
if (mShowCount != null)
mShowCount.setText(count);
}
}
100
6 Connaitre le cycle de vie des composants applicatifs
• onRestoreInstanceState(Bundle state) :
@Override
public void onRestoreInstanceState (Bundle mySavedState) {
super.onRestoreInstanceState(mySavedState);
if (mySavedState != null) {
String count = mySavedState.getString("count");
if (count != null)
mShowCount.setText(count);
}
}
101
6 Connaitre le cycle de vie des composants applicatifs
• Lors de l'arrêt et du redémarrage d'une nouvelle session d'application, les états de l'instance d'activité sont perdus et les activités reprennent
• Lorsque des données utilisateur doivent être sauvegardées entre deux sessions d'application, utiliser des préférences partagées ou une base
de données.
102
6 Connaitre le cycle de vie des composants applicatifs
Classe Fragment
• Possède ses propres états de cycle de vie (comme une activité) Fragment added
onDestroyView()
• Le code du Fragment définit la disposition et le comportement
onPause()
Paused
• Représente des sections d'une interface utilisateur pour différentes mises en page (Layout)
103
6 Connaitre le cycle de vie des composants applicatifs
• Sélecteurs de date et d'heure : Extension de 1. Activité avant l'ajout du Fragment de sélecteur de date ;
2. Le Fragment du sélecteur de date apparaît en haut de l'activité.
DialogFragment (sous-classe de Fragment).
1 2
104
6 Connaitre le cycle de vie des composants applicatifs
Nouveau Fragment
public class SimpleFragment extends Fragment {
public SimpleFragment() {
...
106
6 Connaitre le cycle de vie des composants applicatifs
107
6 Connaitre le cycle de vie des composants applicatifs
108
6 Connaitre le cycle de vie des composants applicatifs
• onAttach() : Appelé lorsque le Fragment est attaché à l'activité pour la première fois ;
• onDestroyView() : Appelé lorsque la vue précédemment créée par onCreateView() est détachée du Fragment
109
6 Connaitre le cycle de vie des composants applicatifs
• Jouer de la musique
111
6 Connaitre le cycle de vie des composants applicatifs
Services et Threads
• Bien que les services soient séparés de l'interface utilisateur, ils s'exécutent toujours sur le Thread principal par défaut (sauf IntentService)
• Fonctionne en arrière-plan mais nécessite que l'utilisateur soit conscient de son existence (par exemple, un lecteur de musique utilisant un
service musical).
• Il est plus prioritaire que les services d'arrière-plan car l'utilisateur remarquera son absence et il est peu probable que le système le tue
• Il doit fournir une notification que l'utilisateur ne peut pas ignorer tant que le service est en cours d'exécution
112
6 Connaitre le cycle de vie des composants applicatifs
• À partir de l'API 26 (Android 8), les applications d'arrière-plan ne sont pas autorisées à créer un service d'arrière-plan
• Une application d'avant-plan peut créer et exécuter des services d'avant-plan et d'arrière-plan
• Lorsqu'une application passe en arrière-plan, le système arrête les services d'arrière-plan de l'application
• Ces limitations n'affectent pas les services de premier plan ou les services liés
113
6 Connaitre le cycle de vie des composants applicatifs
114
6 Connaitre le cycle de vie des composants applicatifs
Arrêter un service
• Le service lié (bound) est détruit lorsque tous les clients se détachent
115
6 Connaitre le cycle de vie des composants applicatifs
IntentService
Limitations de IntentService
116
6 Connaitre le cycle de vie des composants applicatifs
Restrictions de IntentService
• IntentService sont soumis aux nouvelles restrictions sur les services d'arrière-plan
• Pour les applications ciblant l'API 26, Android Support Library 26.0.0 introduit un nouveau JobIntentService
• JobIntentService fournit la même fonctionnalité que IntentService mais utilise des jobs au lieu des services
@Override
protected void onHandleIntent(Intent intent) {
try {
// Faire un travail
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
} // Lorsque cette méthode retourne, IntentService arrête le service, selon le cas.
}
117