我正在使用我的应用中的Android异步Http库进行异步http请求。如何在Android中同步/限制某些异步http调用
我已经进入我的android应用程序的情况下,发生以下情况。我的web API使用访问令牌和刷新令牌。在我所做的每个请求上,我都会检查访问令牌是否仍然有效。如果不是我,那么发出一个http帖子去使用刷新令牌获取一个新的访问令牌。
现在我已经注意到以下情况。
我的应用程序的用户在访问令牌到期时将其手机保持非活动状态的时间足够长。当他们唤醒电话时。在我的onResume()
函数中,我发出了两个单独的http请求。
- 请求1检查访问令牌并确定其无效。它然后发出
refreshAccessToken
请求。 - 虽然请求1正在等待响应,但请求2还检查访问令牌并确定其无效。并且它还发出
refreshAccessToken
请求。 - 请求1成功返回并更新访问令牌和刷新标记值。
- 请求2,然后从API获取
401
响应,因为它提供的刷新标记已被使用。然后,我的应用程序认为refreshToken存在错误,并将用户注销。
这显然是不正确的,我想避免它。我同时在refreshAccessToken
onFailed()
方法中做了重复检查。查看accessToken是否可能再次有效。然而,这样做效率不高,因为我仍然无视sedning两个请求,而且我的API必须处理失败的刷新尝试。
问: 现在我的问题是,我不能使用任何锁或同步,你不能阻止在主UI线程的机器人。和Android异步HTTP库处理所有不同的线程等
如果您并发发送请求1和2,则可能需要在此处进行一些更改,如果您获得401,则无法将用户注销。如果要保留该用户,则请求2当请求1被终止时。 如果你想同时发送两个数毫秒的速度,那么如果请求2产生一个401,但是只有请求1发生,那么不要将用户登出。 – Mostrapotski