web-dev-qa-db-fra.com

quand onRestoreInstanceState est-il appelé?

Désolé pour mon incompréhension, mais je suis nouveau dans le développement Android.

J'ai une application avec l'activité A et l'activité B, et je passe de l'activité A à l'activité B. Lorsque j'ai quitté l'activité A, la méthode onSaveInstanceState a été appelée, mais quand je suis retournée à l'activité A (de activité B dans la même application), le bundle de la méthode onCreate était nul.

Que puis-je faire pour sauvegarder l'état précédent de l'activité A? Je souhaite uniquement stocker les données pour la durée de vie de l'application.

Quelqu'un peut il m'aider avec ça?

Voici mon code pour l'activité A:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if (savedInstanceState != null)
    {
        Log.v("Main", savedInstanceState.getString("test"));
    }
    else
    {
        Log.v("Main", "old instance");
    }
}  

@Override
public void onSaveInstanceState(Bundle savedInstanceState) 
{
    Log.v("Main", "save instance");

    savedInstanceState.putString("test", "my test string");

    super.onSaveInstanceState(savedInstanceState);
}


public void buttonClick(View view)
{
    Intent intent = new Intent(this, Activity2.class);
    startActivity(intent);
}

Voici mon code pour l'activité B, lorsque j'appuie sur un bouton pour revenir à l'activité A:

public void onBack(View view)
{
    NavUtils.navigateUpFromSameTask(this);
}
37
Tünde

L'enregistrement et la restauration de l'état visent à enregistrer les données temporaires actuelles qui sont obsolètes lorsque l'utilisateur quitte l'application. Lorsque vous réduisez ou quittez l'activité en ouvrant la suivante, elle peut être détruite par le système par manque de ressources et redémarrée avec savedInstanceState lorsque vous y revenez. N'utilisez donc onSaveInstanceState() que pour enregistrer les données de session de minimisation-restauration.

Donc, si vous commencez une nouvelle activité devant et revenez à la précédente (ce que vous essayez de faire), l'activité A peut ne pas être tuée (juste arrêtée) et redémarrée sans être détruite. Vous pouvez forcer sa suppression et sa restauration en cochant Don't keep activities Dans le menu des options du développeur.

Si vous appelez finish() ou supprimez le Activity de la liste des tâches récentes, le savedInstanceState ne sera pas transmis à onCreate() puisque la tâche a été effacée.

Si la valeur doit être persistante, envisagez d'utiliser SharedPreferences.

24
Yaroslav Mytkalyk

Pour répondre à votre question, consultez le Android doc: https://developer.Android.com/reference/Android/app/Activity.html#onRestoreInstanceState (Android. os.Bundle)

Il indique que onRestoreInstanceState est appelé après la méthode onStart () dans le cycle de vie de l'activité.

47
Simon

Cela se produit parce que vous naviguez à la dure. Si vous utilisiez la navigation par défaut du bouton retour du téléphone, votre onCreate ferait passer l'ensemble.

Pour contourner ce problème, je vous suggère de sauvegarder votre état dans les préférences partagées ainsi qu'une sauvegarde. Lorsque l'ensemble est nul, restaurez-le à partir des préférences partagées.

3

Après onStart () qui est après onCreate ()

2
bobbins

J'ai utilisé dans ce cas un indicateur et SharedPreferences. Cela devrait fonctionner et lorsque vous modifiez l'orientation de l'écran.

0
Vladimir Expert