Android Enregistrement et restauration de l'état d'activité


Exemple

À mesure que votre activité commence à s'arrêter, le système appelle onSaveInstanceState() afin que votre activité puisse enregistrer les informations d'état avec une collection de paires clé-valeur. L'implémentation par défaut de cette méthode enregistre automatiquement les informations sur l'état de la hiérarchie de vues de l'activité, telles que le texte d'un widget EditText ou la position de défilement d'un objet ListView .

Pour enregistrer des informations d'état supplémentaires pour votre activité, vous devez implémenter onSaveInstanceState() et ajouter des paires clé-valeur à l'objet Bundle. Par exemple:

public class MainActivity extends Activity {
    static final String SOME_VALUE = "int_value";
    static final String SOME_OTHER_VALUE = "string_value";

    @Override
    protected void onSaveInstanceState(Bundle savedInstanceState) {
        // Save custom values into the bundle
        savedInstanceState.putInt(SOME_VALUE, someIntValue);
        savedInstanceState.putString(SOME_OTHER_VALUE, someStringValue);
        // Always call the superclass so it can save the view hierarchy state
        super.onSaveInstanceState(savedInstanceState);
    }
}

Le système appellera cette méthode avant qu'une activité ne soit détruite. Ensuite, le système appellera onRestoreInstanceState où nous pouvons restaurer l'état du bundle:

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    // Always call the superclass so it can restore the view hierarchy
    super.onRestoreInstanceState(savedInstanceState);
    // Restore state members from saved instance
    someIntValue = savedInstanceState.getInt(SOME_VALUE);
    someStringValue = savedInstanceState.getString(SOME_OTHER_VALUE);
}

L'état de l'instance peut également être restauré dans la méthode standard Activity # onCreate, mais il est pratique de le faire dans onRestoreInstanceState qui garantit que toutes les initialisations ont été effectuées et permet aux sous-classes de décider si elles doivent ou non être implémentées. Lisez ce post stackoverflow pour plus de détails.

Notez que onSaveInstanceState et onRestoreInstanceState ne sont pas garantis pour être appelés ensemble. Android appelle onSaveInstanceState() lorsqu'il y a une chance que l'activité soit détruite. Cependant, il existe des cas où onSaveInstanceState est appelé mais l'activité n'est pas détruite et par conséquent onRestoreInstanceState n'est pas onRestoreInstanceState .