Android广播接收器和强制关闭(未捕获的例外)

时间:2011-02-17 11:13:30

标签: android broadcastreceiver

我有一个多活动应用程序,在大多数屏幕上都有退出/退出按钮。

按下按钮会显示确认对话框,然后发出'退出'广播。

我在每个简单调用finish()活动的活动上都有一个广播接收器,而在OnDestroy中我取消注册接收器。该代码在正常使用情况下运行良好。

我面临的问题是如果弹出未捕获的异常并发生强制关闭。

按OK后,最后一个活动显示出来。当我按下退出/登出按钮时 其他活动似乎没有播放广播。

我通常不得不退出每个活动,或者在某些情况下我第二次按下广播传播的退出按钮。

我知道我可以设置Thread.setDefaultUncaughtExceptionHandler()但是,

我在这里错过了什么?

logcat没有显示任何内容。

1 个答案:

答案 0 :(得分:2)

  

我在每个简单调用finish()活动的活动上都有一个广播接收器,而在OnDestroy中我取消注册接收器。该代码在正常使用情况下运行良好。

不,它没有。

您的方法假定所有活动都在内存中。事实并非如此。它们可能是任务的一部分,但不在RAM中,其状态通过onSaveInstanceState()保留。因此,他们不会收到您的广播。

当用户选择“注销”菜单选项或操作栏条目时,您应该清除您的身份验证凭据(可能保存在静态数据成员或自定义Application对象中),然后启动允许用户执行的任何活动登录。您的所有活动都应在onResume()中检查您是否拥有有效的身份验证凭据 - 如果没有,则启动允许用户登录的任何活动。

除此之外,这还消除了导致您遇到困难的广播。

  

我知道我可以设置Thread.setDefaultUncaughtExceptionHandler()但是,

在编写第一个活动之前,您应该已经这样做了。