2010-05-27 3 views
0

J'utilise une classe séparée avec seulement des champs statiques, pour stocker les données d'application actuelles. Il est partiellement rempli à partir de sharedpreferences au démarrage de l'application. Le reste est des données comme les résultats de certaines actions, utilisées pour parcourir ces résultats (plusieurs activités qui utilisent les résultats).Android: Lorsque l'application a été tué, comment définir entrypoint pour le nouveau démarrage?

Je peux aller à l'écran d'accueil, démarrer d'autres applications, etc. et quand je retourne à ma propre application, cela fonctionne correctement.

Cependant, depuis la nouvelle fonctionnalité Error Reporting, je reçois des rapports de bogues tous liés à une erreur nullreference. L'objet null est une référence au champ statique de la classe distincte mentionnée. Puisque je ne peux pas reproduire le bogue, je suis enclin à penser que cela est dû au fait que l'application a été détruite en raison de la mémoire insuffisante, et quand elle redémarre, elle appelle le oncreate de l'activité dans laquelle l'utilisateur se trouvait. les données de la classe séparée ne sont pas restaurées et se bloquent donc.

Je voudrais savoir: existe-t-il un moyen de forcer l'application à "redémarrer" complètement, et ne pas commencer par la dernière activité utilisée si elle est tuée? Ou est ce comportement standard? Puis-je le faire par programme? Comme lorsque les champs statiques sont NULL, redémarrez l'application?

Répondre

2

Redémarrer l'activité où se trouvait l'utilisateur est un comportement normal - l'idée est de lui faire croire que l'application n'a jamais été fermée. Il y a deux choses que vous pouvez regarder:

protected void onSaveInstanceState(Bundle outState){ 
    // This gets called by the system when it's about to kill your app 
    // Put all your data in the outState bundle 
} 

Ce paquet est le même que celui qui est passé à l'activité onCreate(). Vous pouvez ensuite récupérer toutes les informations nécessaires et restaurer les valeurs dans la classe statique. L'autre manière est simplement de vérifier les valeurs dans la méthode onResume() de l'une de vos activités. Si les valeurs sont nulles ou erronées, vous pouvez appeler l'activité d'origine et finish() celle démarrée.

+0

Très bien. On dirait une bonne solution. Pour l'instant j'utilise cependant la propriété 'android: clearTaskOnLaunch' sur la classe principale, donc elle lancera toujours cette activité et fera le rechargement. C'est moins joli, mais ça corrige le bug pour l'instant, j'espère. – Peterdk

+0

Enfin est allé avec le stockage des valeurs statiques directement dans les préférences partagées, et lorsque les valeurs sont nulles, les récupérer de ces préférences partagées. Maintenant, tuer mon application ne la fait pas planter au redémarrage. – Peterdk

Questions connexes