2009-10-15 6 views
1

Tous mes écrans inhérents d'un écran avec la méthode onClose() suivant:problèmes tuer une application personnalisée BlackBerry

public boolean onClose() 
    { 
     Dialog.alert("Closing"); 
     done = true; 
     System.exit(0); 

     return true; 
    } 

Je supposais genre de ce System.exit (0); tuerait réellement ma demande.

Si j'appuie sur le bouton rouge pour quitter complètement, j'obtiens un message de "Fermeture" avec succès. Pareil si j'appuie trop souvent sur le bouton retour. Mais même si j'obtiens cette boîte de dialogue "Fermeture", je continuerai à voir mon application s'exécuter en arrière-plan lorsque je sélectionne "Changer d'application". Non seulement cela, si j'ai un thread en cours d'exécution, parfois je le verrai toujours après avoir quitté l'application (c'est pourquoi j'ai fait ce jeu de variables, de sorte que mes threads vont automatiquement abandonner si c'est fait est vrai). Et en plus, si l'application plante, je ne vois absolument pas mon message de dialogue, même si je parviens à quitter complètement l'application. Si j'essaie de recliquer l'application après son plantage, elle ne se recharge pas non plus. Déjà. Y a-t-il une façon de gérer gracieusement cette situation? (Évidemment j'ai fourni la gestion d'erreur pour chaque problème que j'ai trouvé, mais si quelque chose se produit dans la nature, je veux au moins que l'application ne continue pas à manger de mémoire)

Les apps de Blackberry ne finissent-elles jamais? Est-ce que je fais quelque chose de mal? Maintenant, si je veux que mon application cesse de fonctionner, je dois la supprimer complètement et la réinstaller!

Répondre

2

Si vous étendez net.rim.device.api.ui.Screen (pas MainScreen ou un autre enfant de Screen) alors vous devriez définir spécifiquement le style DEFAULT_CLOSE ou implémenter quelque chose de similaire appeler close() lorsque l'écran devrait être pris vers le bas par l'API docs:

public boolean onClose() 

Indicates a close event has occurred. 

The default implementation is activated by specifying DEFAULT_CLOSE. It will call onSavePrompt() if the screen is dirty, then call close() if successful. 

Returns: 
    True if the screen closes; otherwise, false. 
Since: 
    JDE 3.6.0 

appel System.exit (0) devrait donner lieu à votre application sortir mais il est peut-être tenir offs dans la mise en œuvre pour permettre de sortir des fils et des écrans pour fermer proprement. Le moyen normal pour une application GUI blackberry pour quitter est lorsque le dernier écran est retiré de la pile d'affichage, ce qui se produit lorsque close() est appelée.

+0

Oui, j'utilise MainScreen, désolé de ne pas préciser. Hrmm ... Je pensais que c'est ce que System.exit (0) a fait ... il est déroutant pour moi que ça ne marche pas. Peut-être que certains de mes threads ne sortent pas correctement, donc le programme continue à fonctionner .... Je vais regarder, merci pour le conseil – Jenny

+0

Si vous pensez toujours que vos discussions ne se ferment pas, vous pouvez essayer de faire en sorte que "done" est volatile et appelle join sur les threads supplémentaires. – Andres

1

Ne pas appeler System.exit(0); appel super.onClose(); à moins que comme il le dit ci-dessous vous n'êtes pas overridding MainScreen

+0

Hrrm ... qui aide dans le cas où je riposte jusqu'à ce que l'application a sauté tous les écrans ... Y at-il un moyen de gérer un utilisateur en appuyant sur le bouton de sortie rouge? – Jenny

+0

Le comportement par défaut du bouton rouge (raccrocher) consiste à mettre l'application en arrière-plan. Si vous voulez le quitter (sans enregistrer), vous pouvez garder une trace de vos écrans et appeler close() sur chacun d'entre eux, ou placer un appel de drapeau close() sur l'écran courant, puis dans l'appel onExposed() super.onExposed() puis vérifiez le drapeau et appelez conditionnellement(). – Richard

Questions connexes