同时从多个WorkerThreads调用AccountManager#getAuthTokenByFeatures

问题描述

背景 我正在使用AccountManager自定义帐户类型。首先,应用程序启动用户LogInActivity,服务器接收的令牌存储在帐户中。 Worker组织的某些WorkManager使用令牌来在后台同步数据。每个工作人员都使用AccountManager#getAuthTokenByFeatures()请求令牌。当用户在与服务器连接的网站上更改密码时,令牌已过期并且AccountManager正在启动(由于密码更改)相关的LogInActivtiy。

问题,如果在用户输入新的登录数据期间,其他{并行运行)Worker正在请求AuthToken,则LogInActivity将多次启动。

解决方

  1. 设置LogInActivity的android:launchmode="singleInstance"->仅启动一个Activity,但是第二,第三,…调用Worker会导致死锁,因为没有返回AccountManagerFuture<Bundle>

  2. 创建解决方法AccountAthenticator检查LogInActivity的实例是否已经在前景中运行,并启动所有在后台不可见的活动。如果登录成功,则不建议通过LocalbroadcastManager-> LocalbroadcastManager在后​​台运行LogInActivities来接收必要的信息,这会消耗功率并产生不必要的开销

在这种情况下,将AccountManagerWorkManager结合使用是否正确? AccountManager可能会导致此行为的任何配置问题吗? 还有其他解决方法吗?

非常感谢您的帮助。谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)