杀死自定义黑莓应用程序时出现问题
我的所有屏幕都来自具有以下 onClose() 方法的屏幕:
public boolean onClose()
{
Dialog.alert("Closing");
done = true;
System.exit(0);
return true;
}
我有点假设 System.exit(0);实际上会杀死我的应用程序。
如果我点击红色按钮完全退出,我确实会成功收到“关闭”对话框消息。如果我按后退按钮太多次也是如此。但即使我看到“关闭”对话框,当我选择“切换应用程序”时,我仍然会看到我的应用程序在后台运行。
不仅如此,如果我有一个线程正在运行,有时在退出应用程序后我仍然会看到它在运行(这就是为什么我设置了 did 变量,这样如果 did 为 true,我的线程将自动中止)。
最重要的是,如果应用程序崩溃,我绝对看不到我的对话框消息,即使我设法完全离开应用程序。如果我尝试在应用程序崩溃后重新单击该应用程序,它也不会重新加载。曾经。有没有办法优雅地处理这种情况? (显然,我已经为我发现的每个问题提供了错误处理,但如果在野外发生了某些情况,我至少希望应用程序不会继续消耗内存)
黑莓应用程序永远不会关闭吗?我做错了什么吗?现在,如果我希望我的应用程序停止运行,我必须完全删除它并重新安装它!
All of my screens inherent from a screen with the following onClose() method:
public boolean onClose()
{
Dialog.alert("Closing");
done = true;
System.exit(0);
return true;
}
I kind of assumed that System.exit(0); would actually kill my application.
If I hit the red button to completely exit, I do get a "Closing" dialog message sucessfully. Same if I hit the back button too many times. But even if I get that "Closing" dialog, I'll still see my application running in the background when I select "Switch Application".
Not only that, if I have a thread running, sometimes I'll still see it going after I've quit the application (which is why I have that done variable set, so that my threads will automatically abort if done is true).
And on top of that, if the application crashes, I definitely don't see my dialog message, even if i manage to leave the application entirely. If I try to reclick the application after it's crashed, it doesn't reload, too. Ever. Is there anyway to gracefully handle that situation? (Obviously I have supplied error handling for every problem I've found, but if something happens in the wild, I want at least the application to not continue eating up memory)
Do Blackberry apps just never close? Am I doing something wrong? Right now if I want my application to stop running, I have to completely delete it and reinstall it!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您正在扩展 net.rim.device.api.ui.Screen (不是 MainScreen 或 Screen 的其他子项),那么您应该专门设置 DEFAULT_CLOSE 样式或在屏幕应按以下方式取下时实现类似的调用 close() 的方法API 文档:
调用 System.exit(0) 应该会导致您的应用程序退出,但是在实现中可能会出现延迟,以允许线程退出和屏幕完全关闭。黑莓 GUI 应用程序退出的正常方式是当最后一个屏幕从显示堆栈中弹出时,这在调用 close() 时发生。
If you are extending net.rim.device.api.ui.Screen (not MainScreen or some other child of Screen) then you should ether specifically set DEFAULT_CLOSE style or implement something similar calling close() when the screen should be taken down per the API docs:
Calling System.exit(0) should result in your app exiting however there may be hold offs in the implementation to allow threads to exit and screens to close cleanly. The normal way for a blackberry GUI application to exit is when the last screen is popped off the display stack, which happens when close() is called.
不要调用
System.exit(0);
调用super.onClose();
除非如下所示,您不会覆盖MainScreen
Don't call
System.exit(0);
callsuper.onClose();
unless as he says below your not overriddingMainScreen