屏幕上固有的所有屏幕都带有以下onClose()方法:
public boolean onClose()
{
Dialog.alert("Closing");
done = true;
System.exit(0);
return true;
}
我有点假设System.exit(0);实际上会杀了我的申请。
如果我点击红色按钮完全退出,我会成功获得一个“关闭”对话框消息。如果我按下后退按钮太多次也是如此。但即使我得到“关闭”对话框,当我选择“切换应用程序”时,我仍会看到我的应用程序在后台运行。
不仅如此,如果我有一个线程正在运行,有时我会在我退出应用程序之后看到它(这就是为什么我有完成变量集的原因,所以我的线程会自动中止,如果完成的话真)。
最重要的是,如果应用程序崩溃,我肯定看不到我的对话框消息,即使我设法完全离开应用程序。如果我尝试在崩溃后重新点击该应用程序,它也不会重新加载。永远。反正有没有优雅地处理这种情况? (显然我已经为我发现的每个问题提供了错误处理,但是如果事情发生了,我希望至少应用程序不能继续占用内存)
Blackberry应用程序永远不会关闭吗?难道我做错了什么?现在,如果我希望我的应用程序停止运行,我必须完全删除它并重新安装它!
答案 0 :(得分:2)
如果你正在扩展net.rim.device.api.ui.Screen(而不是MainScreen或Screen的其他子节点),那么你应该专门设置DEFAULT_CLOSE样式或者在应该采取屏幕时实现类似的调用close()根据API文档:
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
调用System.exit(0)应导致您的应用程序退出,但实现中可能存在延迟以允许线程退出并且屏幕干净地关闭。黑莓GUI应用程序退出的常规方法是从显示堆栈弹出最后一个屏幕,这在调用close()时会发生。
答案 1 :(得分:1)
请不要致电System.exit(0);
来电super.onClose();
,除非他在下面说明你不会压倒MainScreen