Android竞态请求问题及解决方案

新知榜官方账号

2023-12-03 02:10:12

Android竞态请求问题及解决方案

昨天,看到飞书团队一篇技术分享《如何解决前端常见的竞态问题》,自己的项目中也存在类似的问题,也是容易出Bug的地方。字节这篇文章是从Web端的视角切入的,借鉴意义有限,这篇文章我们从Android的视角展开讨论。

什么是竞态问题

简单来说,竞态问题就是用户短时间内重复地触发同一个动作产生多个异步请求,而由于请求的响应时延是不稳定的,可能会出现早发起的请求反而比晚发起的请求慢响应的情况,导致界面呈现效果出现混乱、重复、覆盖等异常。

竞态问题的解决方案

我们可以尝试通过破坏竞态问题的必要条件来解决问题。前面我们分解出了竞态问题的3个必要条件:

  1. 异步请求
  2. 关联状态或时序
  3. 响应不稳定

那么解决问题的思路是否可以从破坏竞态问题的必要条件下手呢?

  • 方案1-破坏异步请求条件:在前一个请求的响应返回(成功或失败)前,限制用户触发请求的交互动作,从而将多个异步请求转换为多个同步请求。
  • 方案2-忽略过期响应:在响应的数据结构中增加标识ID,在响应返回后,先检查标识ID是否与最新状态的ID是否相同。如果不相同则直接将该响应丢弃。
  • 方案3-取消过期请求:在同位竞争的请求中增加同一个标识TAG,在发起新请求时,先取消相同标识TAG的请求。
  • 方案4-提高稳定性:通过本地缓存或内存缓存等方案提高响应的稳定性,或者增加一层请求包装层,强行控制响应的顺序。

相对于前面几种方案,取消过期请求的价值最大(拦截请求到服务端的数量),对业务的侵入最小。可以通过OkHttp或Retrofit通过TAG批量取消请求。

本页网址:https://www.xinzhibang.net/article_detail-21806.html

寻求报道,请 点击这里 微信扫码咨询

关键词

Android 竞态请求 OkHttp Retrofit 取消请求

分享至微信: 微信扫码阅读

相关工具

相关文章

相关快讯