Узнайте о жизненном цикле запросов, созданных с помощью Cronet, и о том, как управлять ими с помощью методов обратного вызова, предоставляемых библиотекой.
Обзор жизненного цикла
Сетевые запросы, созданные с помощью библиотеки Cronet, представлены классом UrlRequest
. Следующие понятия важны для понимания жизненного цикла UrlRequest
:
- Штаты
- Состояние — это особое состояние, в котором находится запрос в определенное время. Объекты UrlRequest, созданные с использованием библиотеки Cronet, в своем жизненном цикле проходят разные состояния. Жизненный цикл запроса включает начальное состояние, а также несколько переходных и конечных состояний.
- Методы
UrlRequest
- Клиенты могут вызывать определенные методы объектов
UrlRequest
в зависимости от состояния. Методы переводят запрос из одного состояния в другое. - Методы
Callback
- Реализуя методы класса
UrlRequest.Callback
, ваше приложение может получать обновления о ходе выполнения запроса. Вы можете реализовать методы обратного вызова для вызова методов объектаUrlRequest
, которые переводят жизненный цикл из одного состояния в другое.
В следующем списке описан поток жизненного цикла UrlRequest
:
- Жизненный цикл находится в состоянии «Начало» после того, как ваше приложение вызывает метод
start()
. - Сервер может отправить ответ о перенаправлении, который передает поток методу
onRedirectReceived()
. В этом методе вы можете выполнить одно из следующих действий клиента:- Следуйте за перенаправлением, используя
followRedirect()
. Этот метод возвращает запрос в состояние «Начало» . - Отмените запрос с помощью
cancel()
. Этот метод передает запрос в методonCanceled()
, где приложение может выполнять дополнительные операции, прежде чем запрос будет переведен в конечное состояние «Отменено» .
- Следуйте за перенаправлением, используя
- После того как приложение выполняет все перенаправления, сервер отправляет заголовки ответа и вызывается метод
onResponseStarted()
. Запрос находится в состоянии Ожидание чтения() . Приложение должно вызвать методread()
, чтобы попытаться прочитать часть тела ответа. После вызоваread()
запрос находится в состоянии чтения , где возможны следующие результаты:- Действие чтения прошло успешно, но доступно больше данных. Вызывается
onReadCompleted()
, и запрос снова находится в состоянии ожидания чтения() . Приложению следует снова вызвать методread()
, чтобы продолжить чтение тела ответа. Приложение также может прекратить чтение запроса с помощью методаcancel()
. - Действие чтения прошло успешно, и доступных данных больше нет. Вызывается метод
onSucceeded()
, и запрос теперь находится в конечном состоянии «Успешно» . - Действие чтения не удалось. Вызывается метод
onFailed
, и окончательное состояние запроса теперь Failed .
- Действие чтения прошло успешно, но доступно больше данных. Вызывается
На следующей диаграмме показан жизненный цикл объекта UrlRequest
:
Легенда | |
---|---|
исходное состояние | конечное состояние |
переходное состояние | методы обратного вызова |
Методы UrlRequest |