当应用程序完全关闭时,我必须清理一些应用程序生成的文件。关闭可以在任何屏幕上发生。我应该在哪个方法或哪里覆盖全局菜单关闭事件,而不是在应用程序的每个屏幕上覆盖onClose()?
当在应用程序中间使用Menu Close关闭应用程序时,是否在堆栈上的每个屏幕上调用onClose()并从堆栈中弹出,或者只是从内存中删除应用程序?
答案 0 :(得分:1)
我不相信有一种方法可以完全符合您的要求,但我认为您可以获得您想要的行为。首先,基于我已经完成的测试,关闭菜单项只是为当前屏幕调用onClose()。默认关闭菜单项不会关闭整个应用程序,只关闭一个屏幕。
我能想到的最接近的方法是deactivate(),当应用程序被发送到后台时调用它,但是当它实际关闭时调用(即如果按下红色“结束调用”,将调用此方法)按钮,但如果您在菜单中按关闭则不会。这可能是矫枉过正,但您可以做的是在BlackBerry App Descriptor中选择“启动时自动运行”和“不在BlackBerry主屏幕上显示应用程序图标”。这将使应用程序对应用程序不可见,以便始终在后台,在主屏幕上显示一个图标并显示GUI,您将创建一个可显示UI的备用入口点。然后,当用户选择关闭菜单项时,它实际上正在将应用程序发送到后台,您可以将清理代码放入deactivate()。
更好的方法是在父类中重写onClose(),然后让所有屏幕都继承自该类。您可以将清理代码放在那里。或者,如果您希望关闭菜单项关闭所有屏幕,请覆盖makeMenu()方法并添加MenuItem,它将在调用System.exit()之前执行相应的清理代码。
答案 1 :(得分:0)
在我的应用程序中,我只是将所有屏幕都从公共父类继承。在那个父类中,我实现了标准的退出处理。
弹出屏幕时运行代码的正确位置是Screen.onUiEngineAttached(boolean)。当实际从显示堆栈中推出或弹出屏幕时,将调用该方法。只有在覆盖菜单项的行为或脏屏幕处理时,其他方法才有意义。
另一个选择是拥有一个处理所有这些行为的侦听器对象,并在将它们推送到显示堆栈之前使用Screen.addScreenUiEngineAttachedListener()将它订阅到所有屏幕。