Skip to content

Android SDK для реактивного программирования. Легкий инструмент, поможет Вам с асинхронной роботой при разработке собственных библиотек.

Notifications You must be signed in to change notification settings

rustore-dev/ReactiveSDK

Repository files navigation

ReactiveSDK

ReactiveSDK — это легковесное решение для авторов android приложений и библиотек, которое предоставляет функциональные реактивные программные интерфейсы (FRP) для работы с асинхронными потоками данных. Библиотека включает в себя основные классы для работы с реактивными потоками, такие как Single, Observable и Subjects.

Подключение ReactiveSDK к проекту

  1. В вашем <project>/settings.gradle.kts добавьте репозиторий:
pluginManagement {
    repositories {
        // здесь другие репозитории c вашими зависимостями
        maven { setUrl("https://artifactory-external.vkpartner.ru/artifactory/rustore-maven/") }
    }
}
  1. В вашем <project>/<app_module>/build.gradle.kts добавьте зависимость:
dependencies {
    implementation("ru.rustore:reactive:0.0.1")
}

Основные классы

Single

Класс Single представляет собой реактивный поток, который может завершиться либо успешно, вернув один элемент, либо с ошибкой.

Пример использования:

Single.from { "Hello, World!" }
    .subscribe(
        onSuccess = { println(it) },
        onError = { it.printStackTrace() }
    )

Observable

Класс Observable представляет собой реактивный поток, который может эмитировать ноль, один или несколько элементов, а также завершиться успешно или с ошибкой.

Пример использования:

Observable.create { emitter ->
    emitter.onNext("Hello")
    emitter.onNext("World")
    emitter.onComplete()
}
.subscribe(
    onNext = { println(it) },
    onComplete = { println("Completed") },
    onError = { it.printStackTrace() }
)

Subjects

Subject — это горячий тип потока. Это позволяет им одновременно получать данные и распространять их другим подписчикам. Подписка на горячие источники не может завершиться onError или onComplete, у подписчиков будет вызываться только onNext.

MutableSubject

MutableSubject — это изменяемый Subject, который может эмитировать данные и имеет возможность добавлять новых подписчиков.

Пример использования:

val subject: MutableSubject<String> = MutableSubject()

subject.observe().subscribe(
    onNext = { println(it) },
    onComplete = { println("Completed") },
    onError = { it.printStackTrace() }
)

subject.emit("Hello")
subject.emit("World")

MutableStateSubject

MutableStateSubject - сохраняет в поле value последнее состояние, поведение очень похоже на StateFlow из библиотеки kotlin coroutines.

Неизменяемые горячие источники

В библиотеке есть методы преобразования горячих источников в их неизменяемые варианты (ReadOnlySubject, ReadOnlyStateSubject)

public fun <T> MutableSubject<T>.asSubject(): Subject<T> =
    ReadOnlySubject(this)

public fun <T> MutableStateSubject<T>.asSubject(): Subject<T> =
    ReadOnlySubject(this)

public fun <T> MutableStateSubject<T>.asStateSubject(): StateSubject<T> =
    ReadOnlyStateSubject(this)

Управление потоками

Single и Observable поддерживают управление потоками с помощью методов subscribeOn и observeOn.

Пример использования:

Observable.create { emitter ->
    emitter.onNext("Hello")
    emitter.onNext("World")
    emitter.onComplete()
}
.subscribeOn(Dispatchers.io) // Все операторы ВЫШЕ будут выполняться на этом потоке
.observeOn(Dispatchers.main) // Все операторы НИЖЕ будут выполняться на этом потоке
.subscribe(
    onNext = { println(it) },
    onComplete = { println("Completed") },
    onError = { it.printStackTrace() }
)

Unit тестирование

Для Unit тестирование реализован отдельный артефакт reactive-test

Подключение

В вашем <project>/<app_module>/build.gradle.kts добавьте зависимость:

dependencies {
    testImplementation("ru.rustore:reactive-test:0.0.1")
}

Тестовый диспатчер

При тестировании иногопоточного кода следует использовать тестовый диспатчер для запуска тела Unit-теста.

@Test
    fun myTest() = runReactiveTest { testDispatcher ->
        ////
    }

testDispatcher имеет метод advanceTime, который позволяет смещать время вперед для более удобного тестирования цепочек, в которых присутствуют вызовы delay()

Тестовые слушатели

Для тестирования цепочек присутствуют классы TestObservableObserver, TestSingleObserver, которые имеют механизмы проверок вызова соответствующих колбэков и получения результата цепочек.

About

Android SDK для реактивного программирования. Легкий инструмент, поможет Вам с асинхронной роботой при разработке собственных библиотек.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages