1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/327744707-RxLife-Coroutine

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать

A permissive license whose main conditions require preservation of copyright and license notices. Contributors provide an express grant of patent rights. Licensed works, modifications, and larger works may be distributed under different terms and without source code.

Permissions
  • Commercial use
  • Modification
  • Distribution
  • Patent use
  • Private use
Limitations
  • Trademark use
  • Liability
  • Warranty
Conditions
  • License and copyright notice
  • State changes
README.md 7 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 02.12.2024 21:52 4606cc1

Данный проект был остановлен и официально заброшен, причины следующие:

  1. В одном и том же FragmentActivity/Fragment нельзя совместно использовать rxLifeScope и lifecycleScope. В одной и той же ViewModel нельзя совместно использовать rxLifeScope и viewModelScope.

  2. При отправке запросов с помощью RxHttp необходимо каждый раз запускать отдельный поток для перехвата исключений, что не очень удобно для тех, кто будет повторно его использовать. На данный момент оператор awaitResult в RxHttp также может перехватывать исключения, поэтому rxLifeScope больше не нужен, и пришло время покинуть историческую сцену.

  3. Нельзя запустить поток с передачей параметров CoroutineContext или CoroutineStart, как это можно сделать с lifecycleScope или viewModelScope, а также нет серии методов launchXxx.

  4. Если при отправке запроса с использованием 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.

Этот код также позволяет автоматически закрывать потоки, запросы и сопрограммы при уничтожении страницы.

Журнал обновлений:

v2.2.0 (2021-09-01)

  • rxLifeScope помечен как устаревший и официально выведен из эксплуатации.

v2.0.1 (2020-09-14)

  • Изменения: после закрытия потока любые исключения, возникающие после этого, больше не обрабатываются через обратный вызов ошибки.

  • Исправление: перехватываются исключения в обратном вызове ошибки и печатается журнал.

Преимущества RxLife-Coroutine:

  • Запуск потока и автоматическое управление жизненным циклом потока, автоматическое закрытие потока при уничтожении страницы.

  • Автоматический перехват исключений потока через обратные вызовы ошибок.

  • Возможность отслеживать запуск и завершение потока.

Gradle зависимости:

dependencies {
   // Управление жизненным циклом сопрограммы, автоматическое закрытие сопрограммы при уничтожении страницы
   implementation 'com.github.liujingxing.rxlife:rxlife-coroutine:2.2.0'
}

Использование:

В среде FragmentActivity/Fragment/ViewModel

rxLifeScope.launch({
    // Тело сопрограммы
}, {
    // Обратный вызов исключения
}, {
    // Обратный вызов начала сопрограммы
}, {
    // Обратный вызов завершения сопрограммы, который всегда вызывается независимо от успеха или неудачи
})

Обратите внимание на следующее:

  • Метод launch имеет четыре параметра, только первый из которых является обязательным, остальные три имеют значения по умолчанию и могут быть опущены.

  • Нам не нужно вручную закрывать поток, он будет автоматически закрыт при уничтожении страницы, чтобы предотвратить утечку памяти.

Вне среды FragmentActivity/Fragment/ViewModel

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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/327744707-RxLife-Coroutine.git
git@api.gitlife.ru:oschina-mirror/327744707-RxLife-Coroutine.git
oschina-mirror
327744707-RxLife-Coroutine
327744707-RxLife-Coroutine
master