问题描述
背景
我正在使用AccountManager
和自定义帐户类型。首先,应用程序启动用户LogInActivity,服务器接收的令牌存储在帐户中。 Worker
组织的某些WorkManager
使用令牌来在后台同步数据。每个工作人员都使用AccountManager#getAuthTokenByFeatures()
请求令牌。当用户在与服务器连接的网站上更改密码时,令牌已过期并且AccountManager
正在启动(由于密码更改)相关的LogInActivtiy。
问题,如果在用户输入新的登录数据期间,其他{并行运行)Worker
正在请求AuthToken,则LogInActivity将多次启动。
解决方案
-
设置LogInActivity的
android:launchmode="singleInstance"
->仅启动一个Activity,但是第二,第三,…调用Worker
会导致死锁,因为没有返回AccountManagerFuture<Bundle>
。 -
创建解决方法:
AccountAthenticator
检查LogInActivity
的实例是否已经在前景中运行,并启动所有在后台不可见的活动。如果登录成功,则不建议通过LocalbroadcastManager
->LocalbroadcastManager
在后台运行LogInActivities来接收必要的信息,这会消耗功率并产生不必要的开销
在这种情况下,将AccountManager
与WorkManager
结合使用是否正确?
AccountManager
可能会导致此行为的任何配置问题吗?
还有其他解决方法吗?
非常感谢您的帮助。谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)