android - 同时从多个 WorkerThreads 调用 AccountManager#getAuthTokenByFeatures
问题描述
背景
我正在使用AccountManager
自定义帐户类型。一开始,应用程序启动用户 LogInActivity,服务器收到的令牌存储在帐户中。一些Worker
组织者使用令牌WorkManager
在后台同步数据。每个工人都在用 请求令牌AccountManager#getAuthTokenByFeatures()
。当用户在与服务器相连的网站上更改密码时,令牌已过期,并且AccountManager
正在启动(由于密码更改)相关的 LogInActivtiy。
问题如果在用户输入新登录数据期间其他(并行运行)Worker
正在请求 AuthToken,则 LogInActivity 会启动多次。
解决方法
LogInActivity 的设置
android:launchmode="singleInstance"
-> 只启动了一个 Activity,但是第二个,第三个,...调用Worker
导致死锁,因为没有返回AccountManagerFuture<Bundle>
。创建解决方法:
AccountAthenticator
检查 Instance 是否LogInActivity
已经在前台运行,并在后台启动所有其他不可见的活动。如果登录成功,所有在后台运行 LogInActivities 接收必要的信息通过LocalBroadcastManager
->LocalBroadcastManager
已弃用,耗电和不必要的开销
在这种情况下使用AccountManager
与WorkManager
正确的组合吗?AccountManager
导致此行为可能存在任何配置问题吗?还有其他解决方法吗?
非常感谢您的帮助。谢谢!
解决方案
推荐阅读
- java - 如何限制对 Spring Data Rest 中子链接的访问?
- python - 将字典的长度修改为确定的值并保留具有最高值的键
- react-native - React Native:在 React Native 日历的标题中添加一个图标
- html - 如何在图像图标处设置鼠标效果
- c++ - 如何理解对象已被破坏?
- wordpress - 向所有博客页面添加操作
- android - Xamarin:如何在 OnPageFinished 中引用 ScrollView?
- python - PyQt5 将小部件大小设置为最小并修复
- node.js - 将 github 存储库设为私有后,Circle CI 安装失败
- go - 无法下载 Go with Visual Studio 所需的分析工具