首页 > 解决方案 > 同时从多个 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检查 Instance 是否LogInActivity已经在前台运行,并在后台启动所有其他不可见的活动。如果登录成功,所有在后台运行 LogInActivities 接收必要的信息通过LocalBroadcastManager->LocalBroadcastManager已弃用,耗电和不必要的开销

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

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

标签: androidmultithreadingandroid-workmanageraccountmanager

解决方案


推荐阅读