Suche…


Bemerkungen

RxAndroid war früher eine Bibliothek mit vielen Funktionen. Es wurde in viele verschiedene Bibliotheken aufgeteilt, die von Version 0.25.0 auf 1.x verschoben wurden.

Eine Liste der Bibliotheken, die die vor der Version 1.0 verfügbaren Funktionen implementieren, wird hier beibehalten.

RxAndroid - AndroidSchedulers

Dies ist buchstäblich das einzige, was Sie benötigen, um RxJava unter Android zu verwenden.

Beziehen Sie RxJava und RxAndroid in Ihre Abstufungsabhängigkeiten ein:

 // use the last version
compile 'io.reactivex.rxjava2:rxjava:2.1.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'

Der wichtigste Zusatz von RxAndroid zu RxJava ist ein Scheduler für den Android-Haupt- oder UI-Thread.

In Ihrem Code:

Observable.just("one", "two", "three", "four", "five")
        .subscribeOn(Schedulers.newThread())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(
            data -> doStuffOnMainThread(),
            error -> handleErrorOnMainThread()
        )

Oder Sie können einen Scheduler für einen benutzerdefinierten Looper erstellen:

Looper backgroundLooper = // ...
Observable.just("one", "two", "three", "four", "five")
        .subscribeOn(Schedulers.newThread())
        .observeOn(AndroidSchedulers.from(backgroundLooper))
        .subscribe(
            data -> doStuffOnMainThread(),
            error -> handleErrorOnMainThread()
        )

Für alles andere können Sie sich auf die Standarddokumentation von RxJava beziehen.

RxLifecycle-Komponenten

Die RxLifecycle- Bibliothek erleichtert das Binden beobachtbarer Abonnements an Android-Aktivitäten und den Fragment-Lebenszyklus.

Denken Sie daran, dass das Vergessen der Abmeldung eines Observable-Speichers zu Speicherverlusten führen kann und Ihr Aktivitäts- / Fragmentereignis erhalten bleibt, nachdem es vom System zerstört wurde.

Fügen Sie die Bibliothek den Abhängigkeiten hinzu:

// use the last version available
compile 'com.trello:rxlifecycle:0.6.1'
compile 'com.trello:rxlifecycle-components:0.6.1'

Dann erweitert Rx* -Klassen:

  • RxActivity / support.RxFragmentActivity / support.RxAppCompatActivity
  • RxFragment / support.RxFragment
  • RxDialogFragment / support.RxDialogFragment
  • support.RxAppCompatDialogActivity

Wenn Sie ein Observable abonnieren, können Sie jetzt Folgendes tun:

someObservable
    .compose(bindToLifecycle())
    .subscribe();

Wenn Sie dies in der onCreate() -Methode der Aktivität ausführen, wird sie automatisch in onDestroy() abbestellt.

Dasselbe passiert für:

  • onStart() -> onStop()
  • onResume() -> onPause()
  • onAttach() -> onDetach() (nur Fragment)
  • onViewCreated() -> onDestroyView() (nur Fragment)

Als Alternative können Sie das Ereignis angeben, zu dem die Abbestellung erfolgen soll:

Aus einer Tätigkeit:

someObservable
    .compose(bindUntilEvent(ActivityEvent.DESTROY))
    .subscribe();

Aus einem Fragment:

someObservable
    .compose(bindUntilEvent(FragmentEvent.DESTROY_VIEW))
    .subscribe();

Sie können den beobachtbaren Lebenszyklus auch mit der Methode lifecycle() abrufen, um Lebenszyklusereignisse direkt abzuhören.

RxLifecycle kann auch verwendet werden, um den beobachtbaren Lebenszyklus direkt weiterzuleiten:

.compose(RxLifecycleAndroid.bindActivity(lifecycle))

Wenn Sie Single oder Completable , können Sie dies tun, indem Sie forSingle() bzw. forCompletable nach der Bind-Methode hinzufügen:

someSingle
    .compose(bindToLifecycle().forSingle())
    .subscribe();

Es kann auch mit der Navi- Bibliothek verwendet werden.

Rxpermissions

Diese Bibliothek ermöglicht die Verwendung von RxJava mit dem neuen Berechtigungsmodell für Android M.

Fügen Sie die Bibliothek den Abhängigkeiten hinzu:

Rxjava

dependencies {
    compile 'com.tbruyelle.rxpermissions:rxpermissions:0.8.0@aar'
}

Rxjava2

dependencies {
    compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.8.1@aar'
}

Verwendungszweck

Beispiel (mit Retrolambda der Kürze halber, aber nicht erforderlich):

// Must be done during an initialization phase like onCreate
RxPermissions.getInstance(this)
    .request(Manifest.permission.CAMERA)
    .subscribe(granted -> {
        if (granted) { // Always true pre-M
           // I can control the camera now
        } else {
           // Oups permission denied
        }
    });

Lesen Sie mehr: https://github.com/tbruyelle/RxPermissions .



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow