Enregistrer et restaurer l’état de l’instance En toute simplicité !
En tant que débutant à créer des applications simples, vous remarquerez peut-être lors des tests que la rotation de l’écran réinitialise toutes les données collectées auprès de l’utilisateur. La rotation de l’écran est l’un des nombreux changements du cycle de vie d’Android qui peuvent détruire et recréer l’activité et entraîner la perte de toutes les données! Pas une grande expérience utilisateur.
Pour préparer votre application à ces modifications du cycle de vie de l’activité, vous pouvez ajouter deux méthodes à MainActivity pour enregistrer et restaurer les données:
- ateaveinstancestate()
- onRestoreInstanceState()
La méthode onaveinstancestate() vous permet d’ajouter des paires clé/valeur à l’état extérieur de l’application. Ensuite, la méthode onRestoreInstanceState() vous permettra de récupérer la valeur et de la remettre à la variable à partir de laquelle elle a été collectée à l’origine.
Pour préparer votre application à les utiliser, il est important de créer des variables d’instance pour toutes les données qui devront être conservées lorsque l’état de l’application entraîne la destruction de l’activité. Ces variables sont en dehors de toute méthode et accessibles de n’importe où dans la classe.
Vous voudrez également identifier les vues qui affichent ces données à l’utilisateur et indiquer que vous souhaitez que les données continuent à être affichées ici lorsque l’activité est restaurée avec l’attribut:
android:freezesText="true"
onaveinstancestate():
Cette méthode est appelée avant onstop() dans les anciennes versions d’Android et peut être appelée après onStop() pour les versions plus récentes.
1 @Override
2 protected void onSaveInstanceState(Bundle outState) {
3 super.onSaveInstanceState(outState);
4 outState.putInt("AStringKey", variableData);
5 outState.putString("AStringKey2", variableData2);
6 }
Permet de décomposer cette méthode:
- Le remplacement sur la première ligne indique que vous allez remplacer la déclaration par défaut de la méthode.
- La signature de méthode sur la ligne deux commence par le modificateur d’accès « protégé », cela indique que la méthode n’est accessible qu’au sein de la classe elle-même, du package ou d’une sous-classe. Le type de retour pour cette méthode est « void » car il ne renverra aucune donnée. Le paramètre pris par cette méthode est un objet de type Bundle nommé outState.
- Puisque nous remplaçons cette méthode par défaut, nous devons utiliser super (sur la ligne trois) pour stocker toutes les données d’état extérieur par défaut.
- Sur la quatrième ligne, vous pouvez commencer à stocker vos propres données. onavedinstancestate() est appelé en utilisant la notation par points à l’extérieur de l’application. Le premier argument est une chaîne quelconque et est utilisé comme clé (similaire à la définition d’une variable) pour accéder à la valeur que vous stockez dans le deuxième argument. Ici, nous avons fourni une variable d’instance qui stocke une valeur entière. La ligne d’avis cinq est très similaire, à l’exception d’une variable de type Chaîne qui est enregistrée dans l’État extérieur.
onRestoreInstanceState():
Cette méthode est appelée après onStart().
1 @Override
2 protected void onRestoreInstanceState(Bundle savedInstanceState){
3 super.onRestoreInstanceState(savedInstanceState);
4 variableData = savedInstanceState.getInt("AStringKey");
5 variableData2 = savedInstanceState.getString("AStringKey2");
6 }
Permet de décomposer cette méthode:
- Le remplacement sur la première ligne indique que vous allez remplacer la déclaration par défaut de la méthode.
- La signature de méthode sur la ligne deux commence par le modificateur d’accès « protégé » cela indique que la méthode n’est accessible qu’au sein de la classe elle-même, du package ou d’une sous-classe. Le type de retour pour cette méthode est « void » car il ne renverra aucune donnée. Le paramètre pris par cette méthode est un objet de type Bundle nommé savedInstanceState.
- Puisque nous remplaçons cette méthode par défaut, nous devons utiliser super, sur la ligne trois, pour restaurer toutes les données savedInstanceState par défaut.
- Puisque vous avez stocké vos données d’application pertinentes dans des variables d’instance, vous définissez les données que vous avez enregistrées dans l’État extérieur sur la variable en appelant une méthode get sur savedInstanceState en utilisant la notation par points et fournissez la clé de chaîne utilisée pour stocker les données comme argument.
J’espère que cette explication vous aidera à mieux comprendre ces méthodes et comment les utiliser. Pour plus d’informations, consultez la documentation d’activité pour Android.
Bon codage!