杀死自定义黑莓应用程序的问题

时间:2009-10-15 14:48:26

标签: blackberry jde

屏幕上固有的所有屏幕都带有以下onClose()方法:

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

        return true;
    }

我有点假设System.exit(0);实际上会杀了我的申请。

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

不仅如此,如果我有一个线程正在运行,有时我会在我退出应用程序之后看到它(这就是为什么我有完成变量集的原因,所以我的线程会自动中止,如果完成的话真)。

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

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

2 个答案:

答案 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