Cronet 请求生命周期

本文介绍了使用 Cronet 库创建的请求的生命周期,以及如何使用该库提供的回调方法管理此类请求。

生命周期概览

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

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

以下列表介绍了 UrlRequest 生命周期的流程:

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

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

Cronet 请求生命周期图
Cronet 请求生命周期

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