SlideShare une entreprise Scribd logo
1  sur  42
Télécharger pour lire hors ligne
Sauvegarder et
restaurer l'état des
applications mobiles
Webinaire du 31 août 2020
PRÉSENTATEUR
MVP Embarcadero
Prestataire informatique freelance et formateur Delphi
CV et contacts :
https://www.linkedin.com/in/patrickpremartin/
Blog Delphi/Pascal :
https://developpeur-pascal.fr
Outils Embarcadero
Les meilleurs outils de développement multi-
plateformes. Créez une fois et déployez des
applications modernes sur chaque plateforme.
Support Technique
Nos techniciens sont à votre service à tout
moment pour répondre à vos questions et
vous fournir des informations sûres.
Distributeur Officiel
Partenaire exclusif de Embarcadero
Technologies, largement reconnu pour
ses produits de programmation primés.
B A R N S T E N
QUI
Site : https://www.barnsten.com – Contacts FR : equipe@barnsten.com
NOTRE
Société de prestations informatiques.
Edition de sites Internet, vidéos et livres.
Centre de formation référencé sur Datadock.
Infos et contacts : https://olfsoftware.fr
Formations en entreprise : https://se-former-a-delphi.fr
Formations en ligne : https://apprendre-delphi.fr
O L F S O F T W A R E
INTROD
L’idée de cette présentation était de parler de
contexte d’exécution d’une application mobile
mais avant cela il est nécessaire de savoir
comment elles fonctionnent et quelles sont les
différences avec les logiciels pour Windows,
macOS et Linux.
© Patrick Prémartin / developpeur-pascal.fr
CYCLE
Windows, macOS et Linux sont dans le même
bateau : un programme se lance et se ferme à
peu près de la même façon sur les trois systèmes
d’exploitation.
© Patrick Prémartin / developpeur-pascal.fr
CYCLE
Seul bémol pour macOS : le système peut
envoyer des messages de lancement au
programme et ainsi nous transmettre des
informations.
C’est le cas pour les notifications PUSH et les
interactions avec le système de fichiers.
© Patrick Prémartin / developpeur-pascal.fr
CYCLE
D’une manière générale, ce qu’il faut retenir pour
les programmes FireMonkey pour Windows,
macOS et Linux, c’est qu’on peut les fermer
proprement ou à la dure.
© Patrick Prémartin / developpeur-pascal.fr
CYCLE
La fermeture forcée plante le logiciel, on ne peut
rien y faire car l’OS coupe les processus associés.
La fermeture propre déclenche les événements
onCloseQuery et onClose des fenêtres ouvertes,
puis les blocs finalization des unités (dans l’ordre
de dépilage de leur initialization).
© Patrick Prémartin / developpeur-pascal.fr
DEMONS
Consultation du cycle de vie d’un logiciel pour
Windows, macOS et Linux.
Le source est disponible avec les autres exemples
de cette sessions sur GitHub à l’adresse
https://github.com/DeveloppeurPascal/Sauvegar
derEtRestaurerLEtatDesApplicationsMobiles
© Patrick Prémartin / developpeur-pascal.fr
CYCLE
Sur mobile on n’a qu’un seul mode de fermeture
valide : la version « à la dure ».
Les événements onCloseQuery / onClose ne sont
appelés que lorsqu’on ferme les fenêtres par
programmation, pas quand on coupe
l’application.
© Patrick Prémartin / developpeur-pascal.fr
CYCLE
Le bloc finalization des unités n’est jamais
exécuté sur les plateformes mobiles.
Pensez-y quand vous partagez des unités entre
vos logiciels et que vous utilisez la finalisation du
programme pour enregistrer des paramètres…
car ce ne sera jamais fait sur iOS ni Android !
© Patrick Prémartin / developpeur-pascal.fr
CYCLE
Autre différence entre desktop et
mobiles/tablettes c’est que l’application peut
passer en background suite à la prise d’un appel
téléphonique, la réception d’une notification ou
le passage à un autre programme.
© Patrick Prémartin / developpeur-pascal.fr
CYCLE
Selon l’OS et l’appareil, l’application peut se
fermer sans que l’utilisateur ne l’ait demandé,
comme il peut aussi arriver qu’elle ne soit jamais
fermée (regardez donc la liste des programmes
ouverts sur les smartphones de votre entourage,
avec leur accord, bien sûr).
© Patrick Prémartin / developpeur-pascal.fr
CYCLE
Le cycle de vie d’une application sur Android
est détaillé sur la page
https://developer.android.com/reference/an
droid/app/Activity.html
© Patrick Prémartin / developpeur-pascal.fr
CYCLE
Il existe une subtilité par rapport à iOS : dans
certaines versions d’Android et sur certains
modèles de téléphones le passage en
background implique un redémarrage de
l’application.
© Patrick Prémartin / developpeur-pascal.fr
CYCLE
Sur les versions récentes on peut modifier ce
comportement dans les options
développeurs de l’OS.
Je vous recommande de jouer avec lorsque
vous testez vos applications mobiles pour ne
pas avoir de mauvaises surprise une fois en
production.
© Patrick Prémartin / developpeur-pascal.fr
DEMONS
Voyons les effets de cette simple case sur une
application Android basique.
Le source est disponible avec les autres exemples
de cette sessions sur GitHub :
https://github.com/DeveloppeurPascal/Sauvegar
derEtRestaurerLEtatDesApplicationsMobiles
© Patrick Prémartin / developpeur-pascal.fr
CYCLE
Sous iOS ce problème n’existe pas : les
applications ne sont relancées que si elles sont
arrêtées (« proprement » ou par l’OS si elles
prennent trop de ressources).
© Patrick Prémartin / developpeur-pascal.fr
CYCLE
Le cycle de vie d’une application sous iOS ou
iPadOS est « plus simple » que sur Android. En
tout cas d’après la page de documentation
officielle :
https://developer.apple.com/documentation/uiki
t/app_and_environment/managing_your_app_s_
life_cycle
© Patrick Prémartin / developpeur-pascal.fr
CYCLE
Le hic, parce qu’il y a toujours un hic quand on
parle de technologies Apple, c’est que ça ne
tourne pas toujours pareil selon les versions
d’iOS.
Ca a été nettement simplifié, mais il y a un
changement notable depuis iOS 13.
© Patrick Prémartin / developpeur-pascal.fr
CYCLE
Voici le schéma du cycle de vie d’une application
pour iOS 12 : c’est l’application qui gère les états à
son plus haut niveau.
© Patrick Prémartin / developpeur-pascal.fr
CYCLE
Voici le schéma du cycle de vie d’une application
pour iOS 13 : ce n’est plus l’application qui gère
les états mais ce sont ses scènes.
© Patrick Prémartin / developpeur-pascal.fr
CYCLE
Notez au passage la référence au « Launch Screen
UI » qui est apparu avec iOS 12 et est géré en
standard depuis Delphi 10.4 Sydney puisqu’il est
désormais obligatoire pour l’AppStore.
Rappel : le « Launch Screen UI » n’est pas un
« splash screen ». Apple est clair là dessus même
s’ils ne sévissent pas encore…
© Patrick Prémartin / developpeur-pascal.fr
CYCLE
Pour nous, pas de réelle différence : c’est
FireMonkey qui fait le nécessaire au niveau du
service de plateforme IFMXApplicationEventService
http://docwiki.embarcadero.com/Libraries/Rio/en/
FMX.Platform.IFMXApplicationEventService
© Patrick Prémartin / developpeur-pascal.fr
DEMONS
Voyons comment gérer les étapes du cycle de vie
dans Delphi et ce que ça donne en pratique sous
iOS et Android.
Le source est disponible avec les autres exemples
de cette sessions sur GitHub :
https://github.com/DeveloppeurPascal/Sauvegar
derEtRestaurerLEtatDesApplicationsMobiles
© Patrick Prémartin / developpeur-pascal.fr
CONTEXTE
Passons maintenant au cœur du sujet : sachant ce
qui se produit pour nos logiciels selon ce que font
les utilisateurs sur les différentes plateformes
ciblées, à nous de nous assurer qu’ils ne perdent
pas de données…
© Patrick Prémartin / developpeur-pascal.fr
CONTEXTE
Ce que j’entends par contexte d’exécution est
volontairement vague car cela dépend de chaque
application : les fiches ouvertes, les données en
cours de saisie, les fichiers ouverts et leur
contenu, les transactions non validées dans les
bases de données, …
© Patrick Prémartin / developpeur-pascal.fr
CONTEXTE
En gros les informations de session et l’image
mémoire de l’application ouverte.
Vous en conviendrez, difficile de donner une
solution générique valide pour tous les cas.
© Patrick Prémartin / developpeur-pascal.fr
CONTEXTE
Pour un jeu vidéo ce serait « simple » : ça
consisterait à mettre le jeu en pause et proposer
de relancer la partie lors de la réactivation de
l’application.
© Patrick Prémartin / developpeur-pascal.fr
CONTEXTE
Pour une application de gestion où la moindre
transaction est répartie sur plusieurs écrans et
nécessite la saisie d’une multitude de données, ça
nécessite réflexion.
© Patrick Prémartin / developpeur-pascal.fr
CONTEXTE
Pour nous simplifier la tâche Embarcadero
propose un système de sauvegarde/restauration
d’informations liées à notre logiciel/application
mobile.
http://docwiki.embarcadero.com/RADStudio/Syd
ney/fr/Fonctionnalité_Enregistrer_l%27état_de_F
ireMonkey
© Patrick Prémartin / developpeur-pascal.fr
CONTEXTE
La lecture des données est à faire au niveau de
l’événement onCreate de chaque fiche.
L’enregistrement des données est à faire au
niveau de l’événement onSaveState de chaque
fiche.
© Patrick Prémartin / developpeur-pascal.fr
CONTEXTE
On utilise le flux disponible dans SaveState pour
le stockage qui s’effectue en mémoire mais peut
aussi devenir persistant selon l’état de
l’application et si on spécifie un chemin d’accès
pour son stockage.
© Patrick Prémartin / developpeur-pascal.fr
DEMONS
Ajoutons SaveState aux étapes du cycle de vie et
voyons ce que ça donne.
Le source est disponible avec les autres exemples
de cette sessions sur GitHub :
https://github.com/DeveloppeurPascal/Sauvegar
derEtRestaurerLEtatDesApplicationsMobiles
© Patrick Prémartin / developpeur-pascal.fr
EXEMPLE
Reste à faire un test dans un programme
d’exemple avec une ou plusieurs fiches.
Le source est disponible avec les autres exemples
de cette sessions sur GitHub :
https://github.com/DeveloppeurPascal/Sauvegar
derEtRestaurerLEtatDesApplicationsMobiles
© Patrick Prémartin / developpeur-pascal.fr
QUESTIONS
© Patrick Prémartin / developpeur-pascal.fr
CONCL
© Patrick Prémartin / developpeur-pascal.fr
Nous avons vu les différents états des
applications mobiles et comment sauvegarder et
restaurer le contexte de nos logiciels.
A vous de passer à la pratique pour améliorer
l’expérience de vos utilisateurs au quotidien.
CONCL
© Patrick Prémartin / developpeur-pascal.fr
La rediffusion de ce webinaire devrait être
disponible sur la chaîne YouTube de Barnsten :
https://www.youtube.com/channel/UCSrWP5Y01
uSHS3014Pfprlw/videos
CONCL
© Patrick Prémartin / developpeur-pascal.fr
Pour des ressources complémentaires,
télécharger cette présentation et accéder aux
exemples, rendez-vous sur :
https://developpeur-pascal.fr/p/_200m-
webinaire-du-31-aout-2020-sauvegarder-et-
restaurer-l-etat-des-applications-mobiles.html
PROCHAINS
© Patrick Prémartin / developpeur-pascal.fr
Prochains webinaires :
- 29 septembre 2020 : Développer une
application pour Android TV avec Delphi
- 27 octobre, 24 novembre et 29 décembre
Détails et inscriptions depuis
https://developpeur-pascal.fr/p/_6007-
webinaires.html
CONTACTEZ NOUS

Contenu connexe

Similaire à Sauvegarder et restaurer l'état des applications mobiles

Retour d'expérience AdobeMC 2011
Retour d'expérience AdobeMC 2011Retour d'expérience AdobeMC 2011
Retour d'expérience AdobeMC 2011
jonasmonnier
 
Utiliser FireMonkey comme moteur de jeux vidéo
Utiliser FireMonkey comme moteur de jeux vidéoUtiliser FireMonkey comme moteur de jeux vidéo
Utiliser FireMonkey comme moteur de jeux vidéo
pprem
 
Concevoir une expérience SoLoMo (sociale, locale, mobile): retours d'expérien...
Concevoir une expérience SoLoMo (sociale, locale, mobile): retours d'expérien...Concevoir une expérience SoLoMo (sociale, locale, mobile): retours d'expérien...
Concevoir une expérience SoLoMo (sociale, locale, mobile): retours d'expérien...
Microsoft
 

Similaire à Sauvegarder et restaurer l'état des applications mobiles (20)

Retour d'expérience AdobeMC 2011
Retour d'expérience AdobeMC 2011Retour d'expérience AdobeMC 2011
Retour d'expérience AdobeMC 2011
 
Gérer le clavier virtuel sous iOS et Android
Gérer le clavier virtuel sous iOS et AndroidGérer le clavier virtuel sous iOS et Android
Gérer le clavier virtuel sous iOS et Android
 
Coder sans coder : Delphi en mode no code !
Coder sans coder : Delphi en mode no code !Coder sans coder : Delphi en mode no code !
Coder sans coder : Delphi en mode no code !
 
Cours cordova & REST
Cours cordova & RESTCours cordova & REST
Cours cordova & REST
 
Tester, Monitorer et Déployer son application mobile
Tester, Monitorer et Déployer son application mobileTester, Monitorer et Déployer son application mobile
Tester, Monitorer et Déployer son application mobile
 
Microsoft experiences'16 - Tester, Monitorer et Déployer son application mobile
Microsoft experiences'16 - Tester, Monitorer et Déployer son application mobileMicrosoft experiences'16 - Tester, Monitorer et Déployer son application mobile
Microsoft experiences'16 - Tester, Monitorer et Déployer son application mobile
 
#1 cloud-infra-talk- l ops-du-devops
#1 cloud-infra-talk- l ops-du-devops#1 cloud-infra-talk- l ops-du-devops
#1 cloud-infra-talk- l ops-du-devops
 
Prérequis au développement google android
Prérequis au développement google androidPrérequis au développement google android
Prérequis au développement google android
 
The Spring of Adobe Flex Remoting
The Spring of Adobe Flex RemotingThe Spring of Adobe Flex Remoting
The Spring of Adobe Flex Remoting
 
Utiliser FireMonkey comme moteur de jeux vidéo
Utiliser FireMonkey comme moteur de jeux vidéoUtiliser FireMonkey comme moteur de jeux vidéo
Utiliser FireMonkey comme moteur de jeux vidéo
 
Applications métiers et/ou d'entreprise sur Windows Phone 7 - bonnes pratique...
Applications métiers et/ou d'entreprise sur Windows Phone 7 - bonnes pratique...Applications métiers et/ou d'entreprise sur Windows Phone 7 - bonnes pratique...
Applications métiers et/ou d'entreprise sur Windows Phone 7 - bonnes pratique...
 
Ce qu'il faut retenir de la FrenchKit iOS
Ce qu'il faut retenir de la FrenchKit iOSCe qu'il faut retenir de la FrenchKit iOS
Ce qu'il faut retenir de la FrenchKit iOS
 
Utiliser l'EDI pour développer en multiplateforme
Utiliser l'EDI pour développer en multiplateformeUtiliser l'EDI pour développer en multiplateforme
Utiliser l'EDI pour développer en multiplateforme
 
Apache Cordova 3.3 de zéro
Apache Cordova 3.3 de zéroApache Cordova 3.3 de zéro
Apache Cordova 3.3 de zéro
 
Analyse et optimisation des performances des applications Windows Phone 7.5
Analyse et optimisation des performances des applications Windows Phone 7.5Analyse et optimisation des performances des applications Windows Phone 7.5
Analyse et optimisation des performances des applications Windows Phone 7.5
 
Concevoir une expérience SoLoMo (sociale, locale, mobile): retours d'expérien...
Concevoir une expérience SoLoMo (sociale, locale, mobile): retours d'expérien...Concevoir une expérience SoLoMo (sociale, locale, mobile): retours d'expérien...
Concevoir une expérience SoLoMo (sociale, locale, mobile): retours d'expérien...
 
Offre migrer vers_flutter
Offre migrer vers_flutterOffre migrer vers_flutter
Offre migrer vers_flutter
 
La dure lutte du développeur : 10 trucs pratiques pour une application mobile...
La dure lutte du développeur : 10 trucs pratiques pour une application mobile...La dure lutte du développeur : 10 trucs pratiques pour une application mobile...
La dure lutte du développeur : 10 trucs pratiques pour une application mobile...
 
Kinect en moins de 10 Minutes
Kinect en moins de 10 MinutesKinect en moins de 10 Minutes
Kinect en moins de 10 Minutes
 
20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven20090615 - Ch'ti JUG - Apache Maven
20090615 - Ch'ti JUG - Apache Maven
 

Plus de pprem

Utiliser des dessins vectoriels à la place d'images
Utiliser des dessins vectoriels à la place d'imagesUtiliser des dessins vectoriels à la place d'images
Utiliser des dessins vectoriels à la place d'images
pprem
 

Plus de pprem (20)

Using FireMonkey as a game engine
Using FireMonkey as a game engineUsing FireMonkey as a game engine
Using FireMonkey as a game engine
 
Using Delphi as a no code development environment
Using Delphi as a no code development environmentUsing Delphi as a no code development environment
Using Delphi as a no code development environment
 
Easy coding a multi device game with FireMonkey
Easy coding a multi device game with FireMonkeyEasy coding a multi device game with FireMonkey
Easy coding a multi device game with FireMonkey
 
Quoi de neuf dans la version 11 Alexandria ?
Quoi de neuf dans la version 11 Alexandria ?Quoi de neuf dans la version 11 Alexandria ?
Quoi de neuf dans la version 11 Alexandria ?
 
Utilisation de git avec Delphi
Utilisation de git avec DelphiUtilisation de git avec Delphi
Utilisation de git avec Delphi
 
Comment développer pour Linux avec Delphi
Comment développer pour Linux avec DelphiComment développer pour Linux avec Delphi
Comment développer pour Linux avec Delphi
 
Utiliser des dessins vectoriels à la place d'images
Utiliser des dessins vectoriels à la place d'imagesUtiliser des dessins vectoriels à la place d'images
Utiliser des dessins vectoriels à la place d'images
 
Embarquer une base de données locale dans vos logiciels et applications mobiles
Embarquer une base de données locale dans vos logiciels et applications mobilesEmbarquer une base de données locale dans vos logiciels et applications mobiles
Embarquer une base de données locale dans vos logiciels et applications mobiles
 
Déploiement et débogage à distance
Déploiement et débogage à distanceDéploiement et débogage à distance
Déploiement et débogage à distance
 
Faire une interface adaptive avec la VCL
Faire une interface adaptive avec la VCLFaire une interface adaptive avec la VCL
Faire une interface adaptive avec la VCL
 
Faire une interface adaptive avec FireMonkey
Faire une interface adaptive avec FireMonkeyFaire une interface adaptive avec FireMonkey
Faire une interface adaptive avec FireMonkey
 
QR codes et codes à barres sous Delphi
QR codes et codes à barres sous DelphiQR codes et codes à barres sous Delphi
QR codes et codes à barres sous Delphi
 
Créer des composants visuels sans faire de composant
Créer des composants visuels sans faire de composantCréer des composants visuels sans faire de composant
Créer des composants visuels sans faire de composant
 
Des solutions de synchronisation de données
Des solutions de synchronisation de donnéesDes solutions de synchronisation de données
Des solutions de synchronisation de données
 
Découvrez FireDAC pour FMX
Découvrez FireDAC pour FMXDécouvrez FireDAC pour FMX
Découvrez FireDAC pour FMX
 
Découvrez FireDAC pour la VCL
Découvrez FireDAC pour la VCLDécouvrez FireDAC pour la VCL
Découvrez FireDAC pour la VCL
 
POC Notes de frais
POC Notes de fraisPOC Notes de frais
POC Notes de frais
 
Présentation de Delphi 10.4 Sydney, C++Builder 10.4 Sydney et RAD Studio 10.4...
Présentation de Delphi 10.4 Sydney, C++Builder 10.4 Sydney et RAD Studio 10.4...Présentation de Delphi 10.4 Sydney, C++Builder 10.4 Sydney et RAD Studio 10.4...
Présentation de Delphi 10.4 Sydney, C++Builder 10.4 Sydney et RAD Studio 10.4...
 
Comment écrire des articles de blog à succès
Comment écrire des articles de blog à succèsComment écrire des articles de blog à succès
Comment écrire des articles de blog à succès
 
Gagner de l'argent sur Internet
Gagner de l'argent sur InternetGagner de l'argent sur Internet
Gagner de l'argent sur Internet
 

Sauvegarder et restaurer l'état des applications mobiles

  • 1. Sauvegarder et restaurer l'état des applications mobiles Webinaire du 31 août 2020
  • 2. PRÉSENTATEUR MVP Embarcadero Prestataire informatique freelance et formateur Delphi CV et contacts : https://www.linkedin.com/in/patrickpremartin/ Blog Delphi/Pascal : https://developpeur-pascal.fr
  • 3. Outils Embarcadero Les meilleurs outils de développement multi- plateformes. Créez une fois et déployez des applications modernes sur chaque plateforme. Support Technique Nos techniciens sont à votre service à tout moment pour répondre à vos questions et vous fournir des informations sûres. Distributeur Officiel Partenaire exclusif de Embarcadero Technologies, largement reconnu pour ses produits de programmation primés. B A R N S T E N QUI Site : https://www.barnsten.com – Contacts FR : equipe@barnsten.com
  • 4. NOTRE Société de prestations informatiques. Edition de sites Internet, vidéos et livres. Centre de formation référencé sur Datadock. Infos et contacts : https://olfsoftware.fr Formations en entreprise : https://se-former-a-delphi.fr Formations en ligne : https://apprendre-delphi.fr O L F S O F T W A R E
  • 5. INTROD L’idée de cette présentation était de parler de contexte d’exécution d’une application mobile mais avant cela il est nécessaire de savoir comment elles fonctionnent et quelles sont les différences avec les logiciels pour Windows, macOS et Linux. © Patrick Prémartin / developpeur-pascal.fr
  • 6. CYCLE Windows, macOS et Linux sont dans le même bateau : un programme se lance et se ferme à peu près de la même façon sur les trois systèmes d’exploitation. © Patrick Prémartin / developpeur-pascal.fr
  • 7. CYCLE Seul bémol pour macOS : le système peut envoyer des messages de lancement au programme et ainsi nous transmettre des informations. C’est le cas pour les notifications PUSH et les interactions avec le système de fichiers. © Patrick Prémartin / developpeur-pascal.fr
  • 8. CYCLE D’une manière générale, ce qu’il faut retenir pour les programmes FireMonkey pour Windows, macOS et Linux, c’est qu’on peut les fermer proprement ou à la dure. © Patrick Prémartin / developpeur-pascal.fr
  • 9. CYCLE La fermeture forcée plante le logiciel, on ne peut rien y faire car l’OS coupe les processus associés. La fermeture propre déclenche les événements onCloseQuery et onClose des fenêtres ouvertes, puis les blocs finalization des unités (dans l’ordre de dépilage de leur initialization). © Patrick Prémartin / developpeur-pascal.fr
  • 10. DEMONS Consultation du cycle de vie d’un logiciel pour Windows, macOS et Linux. Le source est disponible avec les autres exemples de cette sessions sur GitHub à l’adresse https://github.com/DeveloppeurPascal/Sauvegar derEtRestaurerLEtatDesApplicationsMobiles © Patrick Prémartin / developpeur-pascal.fr
  • 11. CYCLE Sur mobile on n’a qu’un seul mode de fermeture valide : la version « à la dure ». Les événements onCloseQuery / onClose ne sont appelés que lorsqu’on ferme les fenêtres par programmation, pas quand on coupe l’application. © Patrick Prémartin / developpeur-pascal.fr
  • 12. CYCLE Le bloc finalization des unités n’est jamais exécuté sur les plateformes mobiles. Pensez-y quand vous partagez des unités entre vos logiciels et que vous utilisez la finalisation du programme pour enregistrer des paramètres… car ce ne sera jamais fait sur iOS ni Android ! © Patrick Prémartin / developpeur-pascal.fr
  • 13. CYCLE Autre différence entre desktop et mobiles/tablettes c’est que l’application peut passer en background suite à la prise d’un appel téléphonique, la réception d’une notification ou le passage à un autre programme. © Patrick Prémartin / developpeur-pascal.fr
  • 14. CYCLE Selon l’OS et l’appareil, l’application peut se fermer sans que l’utilisateur ne l’ait demandé, comme il peut aussi arriver qu’elle ne soit jamais fermée (regardez donc la liste des programmes ouverts sur les smartphones de votre entourage, avec leur accord, bien sûr). © Patrick Prémartin / developpeur-pascal.fr
  • 15. CYCLE Le cycle de vie d’une application sur Android est détaillé sur la page https://developer.android.com/reference/an droid/app/Activity.html © Patrick Prémartin / developpeur-pascal.fr
  • 16. CYCLE Il existe une subtilité par rapport à iOS : dans certaines versions d’Android et sur certains modèles de téléphones le passage en background implique un redémarrage de l’application. © Patrick Prémartin / developpeur-pascal.fr
  • 17. CYCLE Sur les versions récentes on peut modifier ce comportement dans les options développeurs de l’OS. Je vous recommande de jouer avec lorsque vous testez vos applications mobiles pour ne pas avoir de mauvaises surprise une fois en production. © Patrick Prémartin / developpeur-pascal.fr
  • 18. DEMONS Voyons les effets de cette simple case sur une application Android basique. Le source est disponible avec les autres exemples de cette sessions sur GitHub : https://github.com/DeveloppeurPascal/Sauvegar derEtRestaurerLEtatDesApplicationsMobiles © Patrick Prémartin / developpeur-pascal.fr
  • 19. CYCLE Sous iOS ce problème n’existe pas : les applications ne sont relancées que si elles sont arrêtées (« proprement » ou par l’OS si elles prennent trop de ressources). © Patrick Prémartin / developpeur-pascal.fr
  • 20. CYCLE Le cycle de vie d’une application sous iOS ou iPadOS est « plus simple » que sur Android. En tout cas d’après la page de documentation officielle : https://developer.apple.com/documentation/uiki t/app_and_environment/managing_your_app_s_ life_cycle © Patrick Prémartin / developpeur-pascal.fr
  • 21. CYCLE Le hic, parce qu’il y a toujours un hic quand on parle de technologies Apple, c’est que ça ne tourne pas toujours pareil selon les versions d’iOS. Ca a été nettement simplifié, mais il y a un changement notable depuis iOS 13. © Patrick Prémartin / developpeur-pascal.fr
  • 22. CYCLE Voici le schéma du cycle de vie d’une application pour iOS 12 : c’est l’application qui gère les états à son plus haut niveau. © Patrick Prémartin / developpeur-pascal.fr
  • 23. CYCLE Voici le schéma du cycle de vie d’une application pour iOS 13 : ce n’est plus l’application qui gère les états mais ce sont ses scènes. © Patrick Prémartin / developpeur-pascal.fr
  • 24. CYCLE Notez au passage la référence au « Launch Screen UI » qui est apparu avec iOS 12 et est géré en standard depuis Delphi 10.4 Sydney puisqu’il est désormais obligatoire pour l’AppStore. Rappel : le « Launch Screen UI » n’est pas un « splash screen ». Apple est clair là dessus même s’ils ne sévissent pas encore… © Patrick Prémartin / developpeur-pascal.fr
  • 25. CYCLE Pour nous, pas de réelle différence : c’est FireMonkey qui fait le nécessaire au niveau du service de plateforme IFMXApplicationEventService http://docwiki.embarcadero.com/Libraries/Rio/en/ FMX.Platform.IFMXApplicationEventService © Patrick Prémartin / developpeur-pascal.fr
  • 26. DEMONS Voyons comment gérer les étapes du cycle de vie dans Delphi et ce que ça donne en pratique sous iOS et Android. Le source est disponible avec les autres exemples de cette sessions sur GitHub : https://github.com/DeveloppeurPascal/Sauvegar derEtRestaurerLEtatDesApplicationsMobiles © Patrick Prémartin / developpeur-pascal.fr
  • 27. CONTEXTE Passons maintenant au cœur du sujet : sachant ce qui se produit pour nos logiciels selon ce que font les utilisateurs sur les différentes plateformes ciblées, à nous de nous assurer qu’ils ne perdent pas de données… © Patrick Prémartin / developpeur-pascal.fr
  • 28. CONTEXTE Ce que j’entends par contexte d’exécution est volontairement vague car cela dépend de chaque application : les fiches ouvertes, les données en cours de saisie, les fichiers ouverts et leur contenu, les transactions non validées dans les bases de données, … © Patrick Prémartin / developpeur-pascal.fr
  • 29. CONTEXTE En gros les informations de session et l’image mémoire de l’application ouverte. Vous en conviendrez, difficile de donner une solution générique valide pour tous les cas. © Patrick Prémartin / developpeur-pascal.fr
  • 30. CONTEXTE Pour un jeu vidéo ce serait « simple » : ça consisterait à mettre le jeu en pause et proposer de relancer la partie lors de la réactivation de l’application. © Patrick Prémartin / developpeur-pascal.fr
  • 31. CONTEXTE Pour une application de gestion où la moindre transaction est répartie sur plusieurs écrans et nécessite la saisie d’une multitude de données, ça nécessite réflexion. © Patrick Prémartin / developpeur-pascal.fr
  • 32. CONTEXTE Pour nous simplifier la tâche Embarcadero propose un système de sauvegarde/restauration d’informations liées à notre logiciel/application mobile. http://docwiki.embarcadero.com/RADStudio/Syd ney/fr/Fonctionnalité_Enregistrer_l%27état_de_F ireMonkey © Patrick Prémartin / developpeur-pascal.fr
  • 33. CONTEXTE La lecture des données est à faire au niveau de l’événement onCreate de chaque fiche. L’enregistrement des données est à faire au niveau de l’événement onSaveState de chaque fiche. © Patrick Prémartin / developpeur-pascal.fr
  • 34. CONTEXTE On utilise le flux disponible dans SaveState pour le stockage qui s’effectue en mémoire mais peut aussi devenir persistant selon l’état de l’application et si on spécifie un chemin d’accès pour son stockage. © Patrick Prémartin / developpeur-pascal.fr
  • 35. DEMONS Ajoutons SaveState aux étapes du cycle de vie et voyons ce que ça donne. Le source est disponible avec les autres exemples de cette sessions sur GitHub : https://github.com/DeveloppeurPascal/Sauvegar derEtRestaurerLEtatDesApplicationsMobiles © Patrick Prémartin / developpeur-pascal.fr
  • 36. EXEMPLE Reste à faire un test dans un programme d’exemple avec une ou plusieurs fiches. Le source est disponible avec les autres exemples de cette sessions sur GitHub : https://github.com/DeveloppeurPascal/Sauvegar derEtRestaurerLEtatDesApplicationsMobiles © Patrick Prémartin / developpeur-pascal.fr
  • 37. QUESTIONS © Patrick Prémartin / developpeur-pascal.fr
  • 38. CONCL © Patrick Prémartin / developpeur-pascal.fr Nous avons vu les différents états des applications mobiles et comment sauvegarder et restaurer le contexte de nos logiciels. A vous de passer à la pratique pour améliorer l’expérience de vos utilisateurs au quotidien.
  • 39. CONCL © Patrick Prémartin / developpeur-pascal.fr La rediffusion de ce webinaire devrait être disponible sur la chaîne YouTube de Barnsten : https://www.youtube.com/channel/UCSrWP5Y01 uSHS3014Pfprlw/videos
  • 40. CONCL © Patrick Prémartin / developpeur-pascal.fr Pour des ressources complémentaires, télécharger cette présentation et accéder aux exemples, rendez-vous sur : https://developpeur-pascal.fr/p/_200m- webinaire-du-31-aout-2020-sauvegarder-et- restaurer-l-etat-des-applications-mobiles.html
  • 41. PROCHAINS © Patrick Prémartin / developpeur-pascal.fr Prochains webinaires : - 29 septembre 2020 : Développer une application pour Android TV avec Delphi - 27 octobre, 24 novembre et 29 décembre Détails et inscriptions depuis https://developpeur-pascal.fr/p/_6007- webinaires.html