Le projet sur lequel je travaille, qui utilise BlackBerry SDK 6, a signalé un bogue dans lequel la fermeture d'un MainScreen entraîne une perte de focus de l'application et un blocage du message. sur la sortie de la console est foreground app ******* lost focus it has no screens
. Permettez-moi de clarifier que ce message est affiché même si un écran sur l'application reste visible, mais en quelque sorte l'application a perdu le focus.L'application BlackBerry perd son focus et provoque le gel de l'application
Je n'ai pas été en mesure de déterminer quelles sont les conditions pour déclencher ce bug, j'ai essayé de prendre le cas où de nombreux MainScreens sont ouverts, puis je les ai fermés en appuyant sur le bouton retour. Je vais essayer de mettre à jour avec une sortie beaucoup plus claire lorsque je déclencherai ce bug.
Sur chaque MainScreen la méthode onClose
est outrepassée appeler une méthode dans notre classe ScreenManager, une classe, nous avons créé pour gérer l'ouverture et la fermeture de nos MainScreens, le code pour qu'il ressemble à ceci:
pubic void back()
{
if(pageStack.size() - 1 == 0) {
// if only one screen is in our stack collection, show a prompt asking if user wants to close app
int choose=Dialog.ask(Dialog.D_YES_NO, ui.getRb().getString(ui.EXIT_YES_NO));
if(choose==Dialog.YES)
{
System.exit(0);
}
} else {
// in case our stack of screens has more than one screen remaining then pop it for our stack
popPageStack();
}
}
le code pour popPageStack est la suivante:
private void popPageStack() {
pageStack.removeElementAt(pageStack.size()-1);
UiApplication.getUiApplication().popScreen(UiApplication.getUiApplication().getActiveScreen());
}
est-il possible que lors de l'appel est la cause écran anti-pop pour cela? Je commence juste à développer sur BlackBerry donc je ne sais pas si une situation où un appel popScreen est fait et alors que l'écran avant que le poped est en cours de rendu peut aucun écran sur l'application cas est possible?
EDIT
J'ai fait un projet d'essai avec un élément de menu que lorsque vous cliquez dessus, supprime le seul écran affiché, après que le comportement que je décrit plus haut est arrivé. En effet, je suis à court d'écrans en quelque sorte et le dernier affiché reste "affiché", mais aucune interaction ne peut être faite, car il a déjà été sorti.
Je vérifie mon projet d'origine, mais je ne comprends pas comment je peux déclencher un appel onClose lorsque je ne fais que reculer en utilisant le bouton de retour. Quoi qu'il en soit, si je devais atteindre la dernière fenêtre, alors une boîte de dialogue devrait apparaître demandant si l'application devrait être proche.
EDIT 2
j'ai pu reproduire le bug deux fois, même si après plusieurs essais. La sortie de la console je suis arrivé était le suivant:
[0.0] JVM: BKLT @ 12347710: SetTimer 30 [0.0] IUE: Focus - Cible perdue, prev = null, null = entrée, app = com.yallaya. [email protected] [0.0] UIE: L'application au premier plan [email protected] a perdu le focus car elle a aucun écran. [0.0] UIE: Focus - cible perdue, prev = null, entrée = null, [email protected] [0.0] UIE: application au premier plan [email protected] perdu de vue parce que il n'a pas d'écrans. [0.0] UIE: L'application de premier plan [email protected] n'a pas d'écran . Cela devrait être corrigé. [0.0] UIE: application au premier plan [email protected] en ignorant l'écran tactile tactile/cliquez car il n'y a pas d'écran cible [0.0]. [0.0] JVM: bklt @ 12377703: timer [0.0] JVM: bklt [1] @ 12377703: usrIdle 27, usrTime 30, usrAct 1 [0.0] JVM: bklt [1] @ 12377703: chkIdle 29, currTime 30 [ 0.0] JVM: bklt @ 12377703: setTimer 3 [0.0] JVM: bklt @ 12380734: horloge [0.0] JVM: bklt [1] @ 12380734: usrIdle 30, usrTime 30, usrAct 1 [0.0] JVM: bklt [1] @ 12380734: chkIdle 33, currtime 30 [0.0] JVM: bklt [1] @ 12380734: enableBacklight 0 [0.0] JVM: bklt [1]: setTimeout 30 [0.0] JVM: bklt [1] @ 12386796: JBSC activé = 0 [0.0] JVM: bklt [1] @ 12386796: SC 0 [0.0] JVM: bklt [1]: setTimeout 30 [0.0] JVM: bklt [1] @ 12388023: JBSC sur = 1 [0.0] JVM: BKLT [1] @ 12388023: SC 1 [0.0] JVM: BKLT @ 12388023: SetTimer 30
Chaque fois que j'essayé d'interagir avec l'écran (soit tactile ou matériel entrée), la ligne [0.0] UIE: Foreground app [email protected] has no screens. This should be corrected.
montrerait.
Est-ce que cela donne un indice sur où est mon problème?
Question similaire posée sur le forum BB ici: http://supportforums.blackberry.com/t5/Java-Development/App-freezes-when-closing-a-MainScreen-loses-focus-and-says-it/td-p/ 2918548 –