【发布时间】:2011-06-29 00:41:51
【问题描述】:
我有一个多活动应用程序,在大多数屏幕上都有一个退出/注销按钮。
按下按钮时,它会显示一个确认对话框,然后发送一个“退出”广播。
我在每个简单地调用finish() 活动的活动上都有一个广播接收器,在 OnDestroy 中我取消了接收器的注册。该代码在正常使用中运行良好。
我面临的问题是如果弹出未捕获的异常并且发生强制关闭。
按 OK 后,最后一个活动显示出来。当我按下退出/注销按钮时 广播似乎没有被其他活动接收。
我通常必须退出每个活动,或者在某些情况下第二次按下广播传播的退出按钮。
我知道我可以设置 Thread.setDefaultUncaughtExceptionHandler() 但是,
我在这里有什么遗漏的吗?
logcat 没有显示任何内容。
【问题讨论】:
-
您的应用中不应有退出按钮。见blog.radioactiveyak.com/2010/05/…
-
该应用程序确实需要一个注销按钮,因为它需要用户登录到系统,并且他可以选择何时注销。作为一个金融应用程序,这是非常必要的。很高兴 Android 的工程师不想要退出按钮,但在现实世界的场景中需要它。
-
退出按钮与注销按钮不同。一定要有一个注销按钮。务必在 onPause 或 onStop 中注销。但是,您确实不需要 需要退出按钮。应用程序生命周期提供了处理这种情况所需的方法,您应该使用它们。
-
我明白了。我的问题实际上是关于向其他活动传播(广播)消息以及未捕获的异常似乎正在破坏广播的接收这一事实。
-
未捕获的异常意味着您的应用程序出现严重问题 - 如果您自己不处理它,那么 Android 会认为它足够严重以至于您的应用程序无法恢复,这就是为什么它(或部分it) 被终止,不再执行任何代码。您可以使用
startActivityForResult和onActivityResult将消息发送回之前的活动,但您可能应该先捕获所有异常。