Данный проект был остановлен и официально заброшен, причины следующие:
В одном и том же FragmentActivity/Fragment
нельзя совместно использовать rxLifeScope
и lifecycleScope
. В одной и той же ViewModel нельзя совместно использовать rxLifeScope
и viewModelScope
.
При отправке запросов с помощью RxHttp необходимо каждый раз запускать отдельный поток для перехвата исключений, что не очень удобно для тех, кто будет повторно его использовать. На данный момент оператор awaitResult
в RxHttp
также может перехватывать исключения, поэтому rxLifeScope
больше не нужен, и пришло время покинуть историческую сцену.
Нельзя запустить поток с передачей параметров CoroutineContext
или CoroutineStart
, как это можно сделать с lifecycleScope
или viewModelScope
, а также нет серии методов launchXxx
.
Если при отправке запроса с использованием rxLifeScope
используется версия RxHttp v2.6.6
или более поздняя, то вызов метода async
приведёт к тому, что обратный вызов завершения запроса не будет вызван.
Альтернативы:
// lifecycleScope
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.3.1"
// viewModelScope
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1"
Использование:
// Использование lifecycleScope или viewModelScope для запуска потока, дополнительные способы использования см. в соответствующих материалах.
lifecycleScope.launch {
// Начало запроса
RxHttp.get("...")
.toStr()
.awaitResult {
// Успешный запрос
}.onFailure {
// Исключение запроса
}
// Завершение запроса
}
Здесь awaitResult
— это всего лишь один из операторов обработки исключений в RxHttp
, для получения дополнительной информации о других операторах исключений обратитесь к статье RxHttp, более элегантное использование сопрограмм, чем Retrofit.
Этот код также позволяет автоматически закрывать потоки, запросы и сопрограммы при уничтожении страницы.
Журнал обновлений:
rxLifeScope
помечен как устаревший и официально выведен из эксплуатации.Изменения: после закрытия потока любые исключения, возникающие после этого, больше не обрабатываются через обратный вызов ошибки.
Исправление: перехватываются исключения в обратном вызове ошибки и печатается журнал.
Преимущества RxLife-Coroutine:
Запуск потока и автоматическое управление жизненным циклом потока, автоматическое закрытие потока при уничтожении страницы.
Автоматический перехват исключений потока через обратные вызовы ошибок.
Возможность отслеживать запуск и завершение потока.
Gradle зависимости:
dependencies {
// Управление жизненным циклом сопрограммы, автоматическое закрытие сопрограммы при уничтожении страницы
implementation 'com.github.liujingxing.rxlife:rxlife-coroutine:2.2.0'
}
Использование:
rxLifeScope.launch({
// Тело сопрограммы
}, {
// Обратный вызов исключения
}, {
// Обратный вызов начала сопрограммы
}, {
// Обратный вызов завершения сопрограммы, который всегда вызывается независимо от успеха или неудачи
})
Обратите внимание на следующее:
Метод launch
имеет четыре параметра, только первый из которых является обязательным, остальные три имеют значения по умолчанию и могут быть опущены.
Нам не нужно вручную закрывать поток, он будет автоматически закрыт при уничтожении страницы, чтобы предотвратить утечку памяти.
val job = RxLifeScope().launch({
// Сопрограмма
}, {
// Обратные вызовы исключений
}, {
// Обратные вызовы начала сопрограммы
}, {
// Обратные вызовы завершения сопрограммы, которые всегда вызываются независимо от успеха или неудачи
})
// В подходящее время вручную закрыть поток
job.cancel()
В этом коде используется RxLifeScope()
для ручного создания объекта RxLifeScope
, и в этом случае нам нужно получить объект Job
в подходящее время и закрыть поток вручную.
Лицензии:
Copyright 2020 liujingxing
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )