了解使用 Cronet 创建的请求的生命周期,以及如何使用该库提供的回调方法管理这些请求。
生命周期概览
使用 Cronet 库创建的网络请求由 UrlRequest
类表示。以下概念对于理解 UrlRequest
生命周期至关重要:
- 状态
- 状态是指请求在特定时间所处的特定条件。使用 Cronet 库创建的 UrlRequest 对象在其生命周期中会经历不同的状态。请求生命周期包括初始状态以及多个过渡状态和最终状态。
UrlRequest
方法- 客户端可以根据
UrlRequest
对象的状态调用特定方法。这些方法会将请求从一种状态移至另一种状态。 Callback
方法- 通过实现
UrlRequest.Callback
类的方法,您的应用可以接收有关请求进度的最新动态。您可以实现回调方法,以调用UrlRequest
对象的方法,将生命周期从一种状态转换为另一种状态。
以下列表介绍了 UrlRequest
生命周期的流程:
- 应用调用
start()
方法后,生命周期处于已开始状态。 - 服务器可能会发送重定向响应,该响应会将流程转到
onRedirectReceived()
方法。在此方法中,您可以执行以下任一客户端操作:- 使用
followRedirect()
跟踪重定向。此方法会将请求恢复为已开始状态。 - 使用
cancel()
取消请求。此方法会将请求传递给onCanceled()
方法,在请求变为“已取消”最终状态之前,应用可以执行其他操作。
- 使用
- 应用跟踪所有重定向后,服务器会发送响应标头并调用
onResponseStarted()
方法。请求处于 Waiting for read() 状态。应用应调用read()
方法来尝试读取部分响应正文。调用read()
后,请求处于读取状态,可能出现以下结果:- 读取操作已成功完成,但还存在更多可用数据。系统会调用
onReadCompleted()
,并且请求再次处于正在等待 read() 状态。应用应再次调用read()
方法,以继续读取响应正文。应用还可以使用cancel()
方法停止读取请求。 - 读取操作已成功,没有更多数据了。已调用
onSucceeded()
方法,请求现在处于成功最终状态。 - 读取操作失败。系统会调用
onFailed
方法,请求的最终状态为失败。
- 读取操作已成功完成,但还存在更多可用数据。系统会调用
下图显示了 UrlRequest
对象的生命周期:
图例 | |
---|---|
初始状态 | 最终状态 |
过渡状态 | 回调方法 |
UrlRequest 方法 |