onRestoreInstanceState() n'est pas appelée lorsqu'il est prévu que
J'ai quelques difficultés ces derniers temps avec onSaveInstanceState()
et onRestoreInstanceState()
. J'ai de multiples activités qui utilisent ces méthodes pour économiser de l'état dans le cas où ils sont nettoyés par le système. La plupart d'entre eux, à l'exception d'un, et je n'ai aucune idée pourquoi.
Précisément ce qui se passe est: est-ce
- J'ai mon émulateur en cours d'exécution, et les outils de dev de l'installation de
destroy()
toutes les activités quand elles ne sont plus visibles. (Afin que je puisse prouver que sauver/restaurer fonctionnent correctement.) - L'Activité en question est en marche, et je procéder pour modifier son état.
- Je commence une nouvelle Activité, le laisser fonctionner pendant un moment, puis utilisez le bouton "retour" pour aller à mon Activité précédente.
- Lors de l'arrivée de retour à l'Activité en question, je remarque que l'état par défaut est de retour, il n'est donc pas l'état qui doit.
J'ai remarqué que les onSaveInstanceState()
est appelé, onCreate()
est appelé, mais a une valeur null bundle, et onRestoreInstanceState()
n'est jamais appelée.
Quelqu'un a déjà vu ça?
Je suis désolé, je sais que cette question est depuis longtemps mais comment avez-vous enregistrer l'état de votre activité? Voulez-vous s'il vous plaît regarder à ma question? stackoverflow.com/questions/26142255/...
OriginalL'auteur nicholas.hauschild | 2010-06-27
Vous devez vous connecter pour publier un commentaire.
Les outils de dev paramètre que vous utilisez peut ne pas avoir le comportement que vous attendez.
Si vous voulez tester
onSaveInstanceState()
/onRestoreInstanceState()
, la chose la plus simple à faire est de changer l'orientation (<Ctrl>-<F11>
). Par défaut, votre activité est détruit et recréé, à l'aide de l'état de l'instance.J'ai tenté de changer d'orientation, qui a appelé
onRestoreInstanceState()
méthode. Mais je n'ai pas de restauration variable dans cette méthode, et encore mon EditText avait des valeurs précédemment saisies, au lieu de n'avoir rien. Pouvez-vous expliquer?Il est intégré dans la mise en œuvre de
onSaveInstanceState()
etonRestoreInstanceState()
qui gèrent bien évidemment l'utilisateur mutable widget de l'état, comme le texte dans unEditText
.Ok. Alors pourquoi avons-nous besoin de surcharger ces méthodes lorsque ceux-ci sont gérées par le SDK?
Vous avez seulement besoin de remplacer ces méthodes si vous avez état pas représenté dans quelque chose que le haut-
onSaveInstanceState()
va gérer. Tout n'est pas une activité est nécessairement du texte dans uneEditText
, par exemple.OriginalL'auteur
Je crois que j'ai compris le problème, et c'est avec des détails que je n'ai pas divulguer dans la question d'origine.
L'une des choses que je sauve dans mon bundle est assez grand (un 500x1000 pixel image Bitmap). Quand je l'ai enlevé de mon Bundle, tout le reste a été enregistré, le onCreate() la méthode a été appelée avec le paquet, et onRestoreInstanceState() a été appelé ainsi.
Donc je crois qu'il est d'une taille maximale Bundle que vous pouvez enregistrer dans onSaveInstanceState(), qui n'est pas documentée. (au moins autant que j'en puis dire)
OriginalL'auteur
L'explication pourquoi
onRestoreInstanceState()
ne s'appelle pas (ou plus peciselly: lorsqu'il est appelé) est donné à une autre question du thread: onSaveInstanceState () et onRestoreInstanceState ()OriginalL'auteur