J'essaie d'enregistrer certaines variables en utilisant SharedPreferences code>. Dans mon Oncreate () Code> Méthode I Initialisez mes variables à l'aide de SharedPreferences CODE>, et je veux que l'application se termine pour stocker ces variables. Je mettez ce code sur la méthode à ondulate () code> mais les variables ne sont jamais stockées. Je pense que la méthode onterminate () code> n'est jamais appelée, car je vois aussi un commentaire sur cette méthode disant // non garanti d'être appelé code>. Alors, comment puis-je enregistrer l'état de ma variable juste avant d'arrêter l'application? Je sais comment, je ne sais tout simplement pas où placer mon code. P>
4 Réponses :
Vous pouvez également le faire en Onpause () en fonction de ce dont vous avez besoin. Dans ce cas, il sauvera chaque fois que votre application a perdu la mise au point. P>
En fait, pour être en sécurité, vous devez enregistrer des choses en Onpause () car (au moins pré-3.0) Votre processus peut être tué par le système d'exploitation après avoir appelle l'onpause (). Cela implique que OnStop () et Ondestroy () peuvent être appelés ou non. P>
Dans tous les cas, il n'ya aucune garantie que OnDestroy () sera jamais appelé. Si le système d'exploitation décide de tuer votre processus, cela ne conviendra pas d'appeler OnDestroy () sur toutes les activités. P>
Eh bien, j'essaie d'utiliser l'onpaause (). Lorsque je le remplace et mettez-le dans le début Super.onpause () Le compilateur dit ne peut pas résoudre la méthode. Si je ne remplace pas et ne mettez pas Super.onpause (), le compilateur dit que la méthode n'est jamais utilisée comme un avertissement. Je suis désolé si cela semble trivial, je suis très nouveau à la programmation Android. Dans un autre projet, cela fonctionnait bien ..
On dirait que la signature de votre méthode pour l'onpaause () n'est pas identique à la méthode Onpause () que vous essayez de remplacer. C'est aussi pourquoi il n'est jamais appelé. Votre méthode Signature doit ressembler à ceci: annulation publique d'alaquevée () code>. Vérifiez que s'il vous plaît.
Qu'est-ce que tu veux dire par la signature de la méthode? Sur mon code, je viens de placer ceci: @override publique annulement sur pause () {super.onpause (); }
Votre classe, est-ce dérivé de l'activité?
de l'application. Savez-vous comment je peux faire cela de cette classe? Je suis vraiment désolé que je n'ai pas mentionné cela avant
Non. Il n'y a pas de méthodes dans la classe d'application qui sont appelées de manière fiable lorsque l'application sort. Il suffit d'enregistrer vos variables chaque fois qu'ils sont changés.
Laissez-nous Continuer cette discussion en chat
Et je veux quand l'application se termine pour stocker ces variables. P> blockQuote>
Cela ne fonctionnera pas, car vous n'obtenez pas de contrôle lorsque "l'application se termine". P>
soit: p>
enregistrer les données lorsque les données changent, ou p> li>
Enregistrez les données lorsque l'utilisateur vous indique (E.G., via une sorte de barre d'actions de sauvegarde) ou p> li>
enregistrer les données lorsque
Onpause () code> de l'activité où vous avez modifié les données sont appelées p> li> ul>
Eh bien, j'essaie d'utiliser l'onpaause (). Lorsque je le remplace et mettez-le dans le début Super.onpause () Le compilateur dit ne peut pas résoudre la méthode. Si je ne remplace pas et ne mettez pas Super.onpause (), le compilateur dit que la méthode n'est jamais utilisée comme un avertissement. Je suis désolé si cela semble trivial, je suis très nouveau à la programmation Android. Dans un autre projet, cela fonctionnait bien ..
@ user1372498: Onpause () code> est une méthode sur activité code>. Comme je l'ai écrit dans ma réponse, "Enregistrez les données lorsque Onpause () code> de l'activité où vous avez modifié les données sont appelées b>".
Vous avez raison, mais j'ai comme 20 activités différentes qui traitent ces données et "communiquer" avec la classe d'application. Toutes les variables sont locales, donc si je économisai sur l'activité, la variable de la classe d'application ne sera pas stockée. Je suppose donc que je dois utiliser une variable globale où toutes les activités peuvent voir? C'est pourquoi je demande si theres un moyen de faire quelque chose juste avant que l'application s'arrête.
@ user1372498: "J'ai comme 20 activités différentes qui traitent ces données et" communiquer "avec la classe d'application" - les trois points de balle de ma réponse sont toujours valables. "Donc, je suppose que je dois utiliser une variable globale où toutes les activités peuvent voir?" - Vous pouvez le faire au lieu de l'application code> code>, mais vous devez toujours mettre en œuvre l'une des stratégies décrites dans mes balles. "C'est pourquoi je demande si theres un moyen de faire quelque chose juste avant que la demande s'arrête." - Comme je l'ai écrit dans ma réponse, vous n'obtenez pas de contrôle "juste avant que l'application s'arrête".
Vous ne devriez pas utiliser cette fonction. P>
Cette méthode est destinée à être utilisée dans des environnements de processus émulsés. Il ne sera jamais appelé sur un dispositif Android de production, où les processus sont supprimés en les tuant simplement; Aucun code d'utilisateur (y compris ce rappel) est exécuté lorsque cela le faisait. P> blockQuote>
source P>