Cronet 请求生命周期

了解使用 Cronet 创建的请求的生命周期,以及如何使用库提供的回调方法来管理它们。

生命周期概览

使用 Cronet 库创建的网络请求由 UrlRequest 类表示。以下概念对于理解 UrlRequest 的生命周期至关重要

状态
状态是指请求在特定时间所处的特定条件。使用 Cronet 库创建的 UrlRequest 对象在其生命周期中会经历不同的状态。请求生命周期包括一个初始状态以及多个过渡状态和最终状态。
UrlRequest 方法
客户端可以根据状态调用 UrlRequest 对象上的特定方法。这些方法将请求从一个状态移至另一个状态。
Callback 方法
通过实现 UrlRequest.Callback 类的方法,您的应用可以接收有关请求进度的更新。您可以实现回调方法来调用 UrlRequest 对象的方法,从而使生命周期从一个状态进入另一个状态。

以下列表描述了 UrlRequest 生命周期流程

  1. 在您的应用调用 start() 方法后,生命周期处于 Started(已开始)状态。
  2. 服务器可能会发送重定向响应,这会使流程进入 onRedirectReceived() 方法。在此方法中,您可以执行以下客户端操作之一
    • 使用 followRedirect() 跟踪重定向。此方法会将请求带回 Started(已开始)状态。
    • 使用 cancel() 取消请求。此方法会将请求带到 onCanceled() 方法,应用可以在请求进入 Canceled(已取消)最终状态之前执行其他操作。
  3. 在应用跟踪完所有重定向后,服务器会发送响应头,并调用 onResponseStarted() 方法。请求处于 Waiting for read()(等待 read())状态。应用应调用 read() 方法尝试读取部分响应正文。调用 read() 后,请求处于 Reading(正在读取)状态,可能出现以下结果
    • 读取操作成功,但有更多数据可用。调用 onReadCompleted(),请求再次处于 Waiting for read()(等待 read())状态。应用应再次调用 read() 方法以继续读取响应正文。应用也可以使用 cancel() 方法停止读取请求。
    • 读取操作成功,且没有更多数据可用。调用 onSucceeded() 方法,请求现在处于 Succeeded(已成功)最终状态。
    • 读取操作失败。调用 onFailed 方法,请求的最终状态现在为 Failed(已失败)。

下图显示了 UrlRequest 对象的生命周期

Cronet request lifecycle
diagram
Cronet 请求生命周期

图例
Cronet 初始状态图例图标 初始状态 Cronet 最终状态图例图标 最终状态
Cronet 过渡状态图例图标 过渡状态 Cronet 回调方法图例图标 回调方法
Cronet 客户端操作图例图标 UrlRequest 方法