web-dev-qa-db-fra.com

Quand est-ce que le paquet SavedInstanCetate réellement utilisé?

Quelqu'un peut-il connaître une liste exhaustive du moment où le paquet SavedInstanCetate sera utilisé dans une activité?

Je sais que c'est utilisé lorsque l'orientation du périphérique change. Cependant, il ne semble pas être utilisé lorsque la force de l'utilisateur ferme l'application à partir du Android Paramètres, mais cela pourrait être dû à quelque chose dans mon code.

Quels autres cas y a-t-il?

Pour être clair, par "utilisé", je veux dire quand onCreate() est appelé, le paquet SavedInstanCetate n'est pas null et contient les données que j'ai transmises dans la dernière fois onSaveInstanceState() a été appelée.

25
howettl

Il est utilisé lorsque l'activité est terminée avec force par le système d'exploitation (ex: lorsque votre activité est en arrière-plan et une autre tâche a besoin de ressources). Lorsque cela se produit, onSaveInstanceState(Bundle outstate) sera appelé et il appartient à votre application pour ajouter des données d'état que vous souhaitez enregistrer dans outstate.

Lorsque l'utilisateur reprend votre activité, onCreate(Bundle savedInstanceState) est appelé et savedInstanceState _ sera non null si votre activité a été terminée dans un scénario décrit ci-dessus. Votre application peut alors saisir les données de savedInstanceState et régénérer l'état de votre activité sur la façon dont il était quand l'utilisateur l'a vu.

Fondamentalement dans onCreate, lorsque savedInstanceState est null, cela signifie que c'est un lancement "frais" de votre activité. Et quand il est non nul (si votre application a sauvegardé les données dans onSaveInstanceState(...), cela signifie que l'état d'activité doit être recréé.

39
triad

onSaveInstanceState est utilisé pour stocker des données uniquement pour la vie d'application (c'est-à-dire temporairement)

Les données sont conservées en mémoire uniquement jusqu'à ce que l'application soit en vie, en d'autres termes, ces données sont perdues lorsque l'application se ferme, donc dans votre cas lorsque vous forcez la fermeture de l'application onSaveInstanceState n'est pas utilisé.

Il ne peut être appelé que lorsque vous effectuez des opérations pendant que votre demande est toujours en vie, par ex. Lorsque vous modifiez l'orientation de l'écran, l'activité est toujours intacte, alors onSaveInstanceState est appelé.

Toutefois, si vous souhaitez stocker définitivement les données, vous devez utiliser SharedPreferences et SQLite database.

20
Arif Nadeem