Szukaj…


Uwagi

RxAndroid był kiedyś biblioteką z wieloma funkcjami. Został on podzielony na wiele różnych bibliotek, przechodząc z wersji 0.25.0 do 1.x.

Lista bibliotek, które realizują funkcje dostępne przed 1,0 utrzymuje się tutaj .

RxAndroid - AndroidSchedulers

To dosłownie jedyna rzecz, której potrzebujesz, aby zacząć korzystać z RxJava na Androidzie.

Uwzględnij RxJava i RxAndroid w zależnościach między stopniami:

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

Głównym dodatkiem RxAndroid do RxJava jest harmonogram dla głównego wątku Androida lub wątku interfejsu użytkownika.

W twoim kodzie:

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

Możesz też utworzyć harmonogram dla niestandardowego Looper :

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

Dla większości innych informacji można odwołać się do standardowej dokumentacji RxJava.

Elementy RxLifecycle

Biblioteka RxLifecycle ułatwia wiązanie obserwowalnych subskrypcji z działaniami systemu Android i cyklem życia fragmentów.

Pamiętaj, że zapomnienie o anulowaniu subskrypcji Obserwowalnego może spowodować wyciek pamięci i utrzymanie aktywności / fragmentu zdarzenia po zniszczeniu przez system.

Dodaj bibliotekę do zależności:

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

Następnie rozszerza klasy Rx* :

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

Wszystko gotowe, subskrybując Observable, możesz teraz:

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

onCreate() tego w onCreate() działania spowoduje automatyczne anulowanie subskrypcji metody onDestroy() .

To samo dzieje się w przypadku:

  • onStart() -> onStop()
  • onResume() -> onPause()
  • onAttach() -> onDetach() (tylko fragment)
  • onViewCreated() -> onDestroyView() (tylko fragment)

Alternatywnie możesz określić zdarzenie, kiedy chcesz zrezygnować z subskrypcji:

Z działania:

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

Z fragmentu:

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

Można również uzyskać obserwowalny cykl życia za pomocą metody lifecycle() celu bezpośredniego nasłuchiwania zdarzeń cyklu życia.

RxLifecycle można również wykorzystać bezpośrednio, przekazując mu obserwowalny cykl życia:

.compose(RxLifecycleAndroid.bindActivity(lifecycle))

Jeśli potrzebujesz obsługi Single lub Completable , możesz to zrobić, dodając odpowiednio forSingle() lub forCompletable po metodzie bind:

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

Można go również używać z biblioteką Navi .

Rxpermissions

Ta biblioteka pozwala na korzystanie z RxJava z nowym modelem uprawnień Android M.

Dodaj bibliotekę do zależności:

Rxjava

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

Rxjava2

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

Stosowanie

Przykład (z Retrolambda dla zwięzłości, ale nie wymagane):

// 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
        }
    });

Czytaj więcej: https://github.com/tbruyelle/RxPermissions .



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow