假设有一个应用程序在AccountManager中创建一个帐户。用户暂时浏览此应用程序的相当复杂的活动图表,然后转到Android设置中的Accounts and Sync
,删除帐户并登录(仍以Accounts and Sync
作为其他用户。
我为LOGIN_ACCOUNTS_CHANGED
广播定义了一个接收器,我可以优雅地关闭所有服务。但是活动仍然存在,在标题中带有第一个用户的名字(UI在很多方面搞砸了,但这个是最明显的)。
所以,问题是:应该对这些孤儿活动做些什么?
clearTaskOnLaunch
的内容,但是当更改发生时,所有活动都在后台。 onResume()
,然后根据需要启动clearTask
活动?太乱了。 android.os.Process.killProcess(android.os.Process.myPid())
来杀死所有活动。这不是太优雅,但可以完成工作。唯一的副作用是活动堆栈仍然存在,最合理的事情似乎是从LAUNCHER
活动开始,具有明确的历史。那么,回应所述情景的最佳方式是什么?
答案 0 :(得分:5)
让您的所有活动都来自MyActivity
类BroadcastReceiver
成员:mChangeReceiver。
让MyActivity
在onCreate
中注册mChangeReceiver(并在onDestroy
中取消注册),注册LOGIN_ACCOUNTS_CHANGED
意图。
让mChangeReceiver调用一些抽象方法onAccountChanged()
,所有扩展类都需要覆盖和实现以反映GUI中的更改。
就是这样。
现在,只要帐户发生变化,您的所有生活活动都会调用onAccountChanged
方法并刷新其GUI。
答案 1 :(得分:0)
我有一些想法,基于你有用户登录机制的事实:
关于UI,如何在onPause上更新用户名UI(可能是textview)到“”并在onResume上将其更新为当前用户?
如果需要关闭活动,您可以将当前用户保存到全局变量和每个活动。每个活动应检查全局活动是否与他们上次更新时存储的活动相同。如果它们不同,您可以关闭活动。您也可以使用clearTask标志。
处理活动的另一种方法是使用片段堆栈。有关更多信息,请查看片段堆栈的android支持示例。