2010-12-14 66 views
0

Je dois faire un nettoyage de certains fichiers générés par l'application, lorsque l'application est complètement fermée. La fermeture peut se produire à partir de n'importe quel écran. Quelle méthode ou où dois-je remplacer globalement par caputure l'événement Menu Close, plutôt que de surcharger onClose() sur chaque écran de l'application?Quelle méthode remplacer pour savoir quand l'application se termine à partir de n'importe quel écran

Et lorsque l'application est fermée en utilisant Menu Fermer au milieu de l'application, onClose() est appelé pour chaque écran de la pile et est retiré de la pile, ou il supprime simplement l'application de la mémoire?

Répondre

1

Je ne crois pas qu'il existe une méthode qui fasse exactement ce que vous voulez mais je pense que vous pouvez obtenir le comportement que vous voulez. Tout d'abord, en fonction des tests que j'ai effectués, l'élément de menu de fermeture appelle simplement onClose() pour l'écran en cours. L'élément de menu de fermeture par défaut ne ferme pas l'ensemble de l'application, il ferme juste un écran. La méthode la plus proche que je peux penser est deactivate(), cela est appelé lorsque l'application est envoyée à l'arrière-plan, mais pas quand il est réellement fermé (ie cette méthode sera appelée si vous appuyez sur le bouton rouge "fin d'appel", mais pas si vous appuyez sur fermer dans le menu). Ce serait probablement exagéré, mais ce que vous pouvez faire est de sélectionner "Exécution automatique au démarrage" et "Ne pas afficher l'icône de l'application sur l'écran d'accueil de BlackBerry" dans votre descripteur BlackBerry App. Cela rendrait l'application invisible pour l'utilisateur afin qu'il soit toujours en arrière-plan, pour avoir une icône sur l'écran d'accueil et afficher une interface graphique, vous créez un autre point d'entrée qui fera apparaître l'interface utilisateur. Ensuite, lorsque l'utilisateur sélectionne l'élément de menu de fermeture, tout ce qu'il fait, c'est envoyer l'application en arrière-plan et vous pouvez mettre votre code de nettoyage dans deactivate().

Une approche bien meilleure consisterait simplement à surcharger onClose() dans une classe parente, puis à faire en sorte que tous vos écrans héritent de cette classe. Vous pouvez mettre votre code de nettoyage là-bas. Ou si vous souhaitez que l'élément de menu de fermeture ferme tous les écrans, remplacez la méthode makeMenu() et ajoutez un MenuItem qui exécutera le code de nettoyage approprié avant d'appeler System.exit().

0

Dans mon application, tous les écrans héritent d'une classe parente commune. Dans cette classe parente, j'implémente ma gestion de sortie standard.

L'emplacement correct pour mettre du code qui s'exécute lorsqu'un écran est sauté est Screen.onUiEngineAttached(boolean). Cette méthode est appelée lorsqu'un écran est effectivement poussé ou sorti de la pile d'affichage. Les autres méthodes ne sont pertinentes que si vous remplacez le comportement des éléments de menu ou la gestion de l'écran.

Une autre option serait d'avoir un seul objet écouteur qui gère tout ce comportement, et d'utiliser Screen.addScreenUiEngineAttachedListener() pour l'abonner à tous les écrans avant de les pousser sur la pile d'affichage.