1

我的所有屏幕都来自具有以下 onClose() 方法的屏幕:

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

        return true;
    }

我有点假设 System.exit(0); 实际上会杀死我的应用程序。

如果我点击红色按钮完全退出,我会成功收到“关闭”对话框消息。如果我多次点击后退按钮,也是如此。但即使我得到那个“关闭”对话框,当我选择“切换应用程序”时,我仍然会看到我的应用程序在后台运行。

不仅如此,如果我有一个线程正在运行,有时在我退出应用程序后我仍然会看到它继续运行(这就是我设置 done 变量的原因,这样如果 done 为真,我的线程将自动中止)。

最重要的是,如果应用程序崩溃,我肯定看不到我的对话消息,即使我设法完全离开应用程序。如果我在应用程序崩溃后尝试重新单击它,它也不会重新加载。曾经。无论如何,有没有优雅地处理这种情况?(显然我已经为我发现的每一个问题提供了错误处理,但是如果在野外发生了一些事情,我至少希望应用程序不会继续消耗内存)

黑莓应用程序永远不会关闭吗?难道我做错了什么?现在,如果我想让我的应用程序停止运行,我必须完全删除它并重新安装它!

4

2 回答 2

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() 时。

于 2009-10-15T18:46:29.363 回答
1

不要System.exit(0);打电话super.onClose(); ,除非他在你不压倒一切的下面说MainScreen

于 2009-10-15T20:38:50.083 回答