我有一个多活动应用程序,在大多数屏幕上都有退出/退出按钮。
按下按钮会显示确认对话框,然后发出'退出'广播。
我在每个简单调用finish()活动的活动上都有一个广播接收器,而在OnDestroy中我取消注册接收器。该代码在正常使用情况下运行良好。
我面临的问题是如果弹出未捕获的异常并发生强制关闭。
按OK后,最后一个活动显示出来。当我按下退出/登出按钮时 其他活动似乎没有播放广播。
我通常不得不退出每个活动,或者在某些情况下我第二次按下广播传播的退出按钮。
我知道我可以设置Thread.setDefaultUncaughtExceptionHandler()但是,
我在这里错过了什么?
logcat没有显示任何内容。
答案 0 :(得分:2)
我在每个简单调用finish()活动的活动上都有一个广播接收器,而在OnDestroy中我取消注册接收器。该代码在正常使用情况下运行良好。
不,它没有。
您的方法假定所有活动都在内存中。事实并非如此。它们可能是任务的一部分,但不在RAM中,其状态通过onSaveInstanceState()
保留。因此,他们不会收到您的广播。
当用户选择“注销”菜单选项或操作栏条目时,您应该清除您的身份验证凭据(可能保存在静态数据成员或自定义Application
对象中),然后启动允许用户执行的任何活动登录。您的所有活动都应在onResume()
中检查您是否拥有有效的身份验证凭据 - 如果没有,则启动允许用户登录的任何活动。
除此之外,这还消除了导致您遇到困难的广播。
我知道我可以设置Thread.setDefaultUncaughtExceptionHandler()但是,
在编写第一个活动之前,您应该已经这样做了。