的项目我的工作,它使用黑莓SDK 6,报道了关闭一个MainScreen时,导致应用突然失去焦点,并停止响应的错误,该消息报道在控制台输出是foreground app ******* lost focus it has no screens
。让我澄清,即使屏幕上的应用程序仍然可见,但显示此消息显示,但不知何故该应用程序失去了重点。黑莓应用程序失去焦点,并导致应用程序冻结
我一直没能查明这是触发这个bug的条件,我试图采取许多地方都MainScreens打开的情况下,然后我通过点击返回按钮关闭它们。当我触发这个错误时,我会尝试更新更清晰的输出。
在每一个MainScreen的onClose
方法重载,调用我们的屏幕管理类中的方法,一类我们创建来处理我们的MainScreens的开启和关闭,它的代码如下所示:
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();
}
}
popPageStack的代码是这样的:
private void popPageStack() {
pageStack.removeElementAt(pageStack.size()-1);
UiApplication.getUiApplication().popScreen(UiApplication.getUiApplication().getActiveScreen());
}
是否有可能在popScreen调用期间导致这种情况?我刚开始在黑莓开发,所以我不知道,如果其中popScreen调用制成,而一个POP操作前的画面被渲染的情况下可以在应用程序情况下没有屏幕是可能的?
编辑
我做了一个测试项目与菜单项,单击时,删除仅屏幕显示,我所描述的行为发生较早之后。事实上,我用某种方式耗尽了屏幕,显示的最后一张仍然“显示”,但由于已经弹出,所以不能进行交互。
我检查我原来的项目,但我不明白我怎么能触发时,我刚刚搬回使用返回按钮的的OnClose电话。无论如何,如果我要到达最后一个窗口,那么会弹出一个对话框询问应用程序是否应该关闭。
EDIT 2
我能够重现错误的两倍,尽管多次尝试后。控制台输出我是这样的:
[0.0] JVM:BKLT @ 12347710:SetTimer的30 [0.0] UIE:焦点 - 目标丢失, 先前= NULL,输入= NULL,应用程式= com.yallaya。 [email protected] [0.0] UIE: 前景应用[email protected]失去焦点,因为它具有 没有屏幕。 [0.0] UIE:焦点 - 目标丢失,prev = null,input = null, [email protected] [0.0] UIE:Foreground app [email protected]失去焦点,因为它没有屏幕。 [0.0] UIE:前台应用程序[email protected]没有 屏幕。这应该被纠正。 [0.0] UIE:前景应用 [email protected]忽略触摸屏触摸/点击,因为 它没有[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:timer [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 on = 0 [0.0] JVM:bklt [1] @ 12386796:SC 0 [0.0] JVM: bklt [1]:setTimeout 30 [0.0] JVM:bklt [1] @ 12388023: JBSC上= 1 [0.0] JVM:BKLT [1] @ 12388023:SC 1 [0.0] JVM:BKLT @ 12388023:SetTimer的30
每次我试图与屏幕(或者触摸或硬件交互作用输入),[0.0] UIE: Foreground app [email protected] has no screens. This should be corrected.
行会显示。
这是否暗示我的问题在哪里?
类似的问题在BB论坛上被问到:http://supportforums.blackberry.com/t5/Java-Development/App-freezes-when-closing-a-MainScreen-loses-focus-and-says-it/td-p/ 2918548 –