Destruction et recréation de l’activité

Gestion des données lors de la destruction et recréation de l’activité

Lorsqu’une activité passe à l’état arrêté, le système peut la détruire pour récupérer des ressources.

Par exemple, lorsque l’activité A lance l’activité B, l’activité A passe à l’état arrêté. Si le système détruit l’activité A en raison d’un manque de mémoire, et que l’utilisateur appuie ensuite sur le bouton Retour pour revenir à l’activité A,

l’activité A s’affichera normalement. Cependant, dans ce cas, onRestart() ne sera pas appelé ; à la place, onCreate() sera exécuté, car l’activité A est recréée.

Si l’activité A contenait des données temporaires, comme du texte saisi dans un champ, ces données seront perdues une fois l’activité détruite.

Si une telle situation se produit dans notre application, cela nuira gravement à l’expérience utilisateur.

Heureusement, Android fournit une méthode de rappel appelée onSaveInstanceState(), qui est garantie d’être appelée avant que l’activité ne soit détruite.

Cela nous permet de résoudre le problème de perte des données temporaires lors de la destruction de l’activité.

La méthode onSaveInstanceState() reçoit un paramètre de type Bundle.

La classe Bundle propose une série de méthodes pour enregistrer des données, telles que putString() pour les chaînes de caractères et putInt() pour les entiers.

Redéfinition de la méthode onSaveInstanceState

// Français
@Override
protected void onSaveInstanceState(Bundle outState) { // Cette méthode est appelée avant que l'activité ne soit détruite
    super.onSaveInstanceState(outState);
    outState.putString("user_name", "Mlle Pan");
}Langage du code : JavaScript (javascript)
// Français
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.e(TAG, "onCreate: ");

    if (savedInstanceState != null) // Dans onCreate, nous pouvons vérifier si le Bundle contient des données ; si c'est le cas, l'activité a été détruite et est en cours de recréation
    {
        Log.e(TAG, savedInstanceState.getString("user_name"));
    }
}Langage du code : JavaScript (javascript)

Récupération des données du Bundle lors de la recréation

Dans la méthode onCreate, le système fournit un paramètre de type Bundle :

// Français
protected void onCreate(Bundle savedInstanceState) {Langage du code : JavaScript (javascript)

Récupération des données du Bundle

// Français
if (savedInstanceState != null) // Dans onCreate, nous pouvons vérifier si le Bundle contient des données ; si c'est le cas, l'activité a été détruite et est en cours de recréation
{
    Log.e(TAG, savedInstanceState.getString("user_name"));
}Langage du code : JavaScript (javascript)

Destruction et recréation de l’activité

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *