我在这里看到两个基于你调用的API如何工作的场景.

第一个肯定更容易处理 – 调用新凭证(例如访问令牌)不会使旧凭证失效.要实现它,您可以在凭据中添加额外的标志,以表示正在刷新凭据.当你得到401响应时,你将flag设置为true,发出获取新凭据的请求,只有当flag等于true时才保存它们,这样只会处理第一个响应,其余部分将被忽略.确保您对标志的访问是同步的.

另一种情况有点棘手 – 每次调用新凭证时,旧服务器都会被服务器端过期.为了处理它,我将引入一个新对象作为semafore使用 – 每次“刷新凭据”时它都会被阻止.为了确保您只进行一次’刷新凭证’调用,您需要在与flag同步的代码块中调用它.它看起来像:

synchronized(stateObject) {

if(!stateObject.isBeingRefreshed) return;

Response response = client.execute(request);

apiClient.setCredentials(response.getNewCredentials());

stateObject.isBeingRefreshed = false;

}

你已经注意到有一个额外的检查是否(!stateObject.isBeingRefreshed)返回;通过遵循收到401响应的请求取消请求新凭证.

android okhttp 多线程,android – Okhttp Authenticator多线程相关推荐

  1. Android使用RxJava+Retrofit2+Okhttp+MVP练习的APP

    Android使用RxJava+Retrofit2+Okhttp+MVP练习的APP 项目截图 这是我的目录结构 五步使用RxJava+Retrofit2+Okhttp+RxCache 第一步:导包 ...

  2. 【OkHttp】Android 项目导入 OkHttp ( 配置依赖 | 配置 networkSecurityConfig | 配置 ViewBinding | 代码示例 )

    OkHttp 系列文章目录 [OkHttp]OkHttp 简介 ( OkHttp 框架特性 | Http 版本简介 ) [OkHttp]Android 项目导入 OkHttp ( 配置依赖 | 配置 ...

  3. android封装网络请求界面,轻松搞定 android MVP 架构、okHttp 网络模块封装 的 项目...

    CommonMvp commonMvp 能做什么? 1.mvp 实现 model view presenter 业务和界面解耦 2.整合 网络 请求 3.简化网络调用流程 4.整合状态栏和标题栏 实现 ...

  4. android项目中使用的服务器上,android 开发中使用okhttp上传文件到服务器

    开发android手机客户端,常常会需要上传文件到服务器,比如:你手机里的照片. 使用okhttp会是一个很好的选择.它使用很简单,而且运行效率也很高. 首先,在 app/build.gradle 的 ...

  5. Android客户端连接服务器- OKHttp的简单实用方法

    文章目录 一 .OKHttp简介 二. OkHttp3使用 1.创建HTTPClient实例 2.Get请求 3.POST请求 三.Timeouts(超时) **写在前面:本文只是对OKHttp3的简 ...

  6. Android入门(十七)Android多线程

    原文链接:http://www.orlion.ga/670/ 一.在子线程中更新UI Android中不允许在子线程中更新UI,只能在主线程中更新,但是我们有时候必须在子线程中执行一些耗时的任务,然后 ...

  7. Android移动开发之【Android实战项目】DAY6-安卓多线程

    Android只会存在两种线程:UI主线程(UI thread)和工作线程(work thread). 我们知道Android的UI主线程主要负责处理用户的按键事件.用户的触屏事件以及屏幕绘图事件等, ...

  8. Android使用开源项目Xutils实现多线程下载文件

    #1.下载utils项目 https://github.com/wyouflf/xUtils #2布局文件里实现UI <LinearLayout xmlns:android="http ...

  9. android异步线程未执行,关于多线程:当服务在后台运行时,Android异步任务无法正常运行(doInBackground未执行)...

    我注意到有时Async任务无法正常运行,实际上它的doInBackground()方法没有被调用,这种情况主要发生在该活动在后台运行任何服务时. 例如,当音乐在带有服务的后台运行时,Async任务不会 ...

  10. ios多线程Android,iOS 关于多线程

    一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如:同时打开QQ,Xcode,系统就会分别启动2个进程 通过 ...

最新文章

  1. codeforces 712 Memory and De-Evolution
  2. 一般纳米材料是指尺度为_纳米材料及纳米材料在高分子领域的应用
  3. IOS15 SVProgressHUD 报UIWindow 无法识别错误
  4. ajax headers 参数有什么用_动态爬虫(ajax)-爬取bilibili热门视频信息
  5. 阿里云asp主机 后台登录一直提示验证码错误_吐槽一下阿里云关于网站备案的问题,真让人恶心生厌!...
  6. C#LeetCode刷题-二叉搜索树
  7. kasp技术原理_KASP基因型测定技术在各个学科的应用实践(内附官方重要资料)...
  8. A. 解决运行php文件出现乱码的问题
  9. 【编辑器】用CodeRunner打造VScode的C++开发环境
  10. Dreamweaver视频教程(共53课时)
  11. 小米蓝牙耳机airdots青春版双耳模式
  12. (转)没有自制力的人有什么资格谈努力?
  13. 此beta版已额满_天龙八部荣耀版 新手升级指南
  14. 香港电动方程式大赛3月开跑 体验区可模拟中环驾车
  15. 抖音数据 - 网民评论数据采集,分析
  16. 开关电源环路补偿设计及调节笔记
  17. gps有几个轨道面_GPS(全球定位系统)的 24 颗卫星的轨道是如何设计的?
  18. TCP固定头部结构详解
  19. 共享汽车死亡前仆后继,巨头们要排队共赴黄泉?
  20. 论文学习|基于少镜头学习的毛果杨群体叶片性状分析

热门文章

  1. 姚殊清华计算机科学与技术,王道顺(清华大学计算机科学与技术系副教授)_百度百科...
  2. @Autowired注解与@resource注解的区别(十分详细)
  3. win10启动telnet
  4. 解析mysqlbinlog日志_每日学点---Mysql的binlog日志解析导出
  5. 2017-07-18日看登录日志,显示十条:最早的是:2014-04-07 17:09,应该就是注册日期吧
  6. python3.4.4怎么打代码_Python3.4里面__name和__main__的作用
  7. php解析QQmv直链,网易云音乐直链解析API源代码^-^
  8. 8g ubuntu 树莓派4b_树莓派4B(4G版本)安装Ubuntu 19.10
  9. java月份列表_java – 如何获取两个日期之间的月份和年份列表
  10. oracle分页置顶,[置顶]       ibatis查询oracle分页