假设有一个在 AccountManager 中创建帐户的应用程序。用户浏览了这个应用程序相当复杂的活动图一段时间,然后进入Accounts and Sync
Android 设置,删除帐户并登录(仍然Accounts and Sync
以其他用户身份登录。
我已经定义了一个LOGIN_ACCOUNTS_CHANGED
广播接收器,我可以优雅地关闭所有服务。但是活动仍然存在,在他们的标题中带有第一个用户的名字(UI 在很多方面都搞砸了,但这个是最明显的)。
那么,问题来了:这些孤儿活动应该怎么办?
- 我可以使用类似的东西
clearTaskOnLaunch
,但是当更改发生时,所有活动都在后台。 - 在 SharedPreferences 中设置一个标志并签入
onResume()
每个活动,然后clearTask
在需要时启动活动?太乱了 - 我能想到的最好的选择是
android.os.Process.killProcess(android.os.Process.myPid())
用来杀死所有的活动。这不是太优雅,但可以完成工作。唯一的副作用是活动堆栈仍然存在,此时最合理的事情似乎是从LAUNCHER
活动开始,并具有清晰的历史记录。
那么,响应所描述场景的最佳方式是什么?