Zoeken…


Opmerkingen

RxAndroid was een bibliotheek met veel functies. Het is opgesplitst in veel verschillende bibliotheken die van versie 0.25.0 naar 1.x gaan.

Een lijst met bibliotheken die de beschikbare functies voor de 1.0 implementeren, wordt hier bijgehouden.

RxAndroid - AndroidSchedulers

Dit is letterlijk het enige dat je nodig hebt om RxJava op Android te gaan gebruiken.

Neem RxJava en RxAndroid op in uw gradle-afhankelijkheden:

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

RxAndroid belangrijkste toevoeging aan RxJava is een planner voor de Android-hoofdthread of UI-thread.

In uw code:

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

Of u kunt een planner maken voor een aangepaste Looper :

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

Voor bijna al het andere kunt u verwijzen naar standaard RxJava-documentatie.

RxLifecycle-componenten

De RxLifecycle- bibliotheek maakt het gemakkelijker waarneembare abonnementen te binden aan Android-activiteiten en de levenscyclus van fragmenten.

Vergeet niet dat het vergeten van het uitschrijven van een Observable geheugenlekken kan veroorzaken en uw activiteit / fragment levend kan houden nadat het door het systeem is vernietigd.

Voeg de bibliotheek toe aan de afhankelijkheden:

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

Rx* vervolgens de Rx* -klassen uit:

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

U bent helemaal klaar, wanneer u zich abonneert op een Observable, kunt u nu:

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

Als u dit uitvoert in de methode onCreate() van de activiteit, wordt dit automatisch uitgeschreven in onDestroy() .

Hetzelfde gebeurt voor:

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

Als alternatief kunt u de gebeurtenis opgeven wanneer u wilt dat de afmelding plaatsvindt:

Van een activiteit:

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

Uit een fragment:

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

U kunt de te observeren levenscyclus ook verkrijgen met behulp van de methode lifecycle() om rechtstreeks naar gebeurtenissen in de lifecycle() te luisteren.

RxLifecycle kan ook worden gebruikt om de levenscyclus waarneembaar aan te geven:

.compose(RxLifecycleAndroid.bindActivity(lifecycle))

Als u Single of Completable moet verwerken, kunt u dit doen door respectievelijk alleen forSingle() of forCompletable na de forCompletable :

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

Het kan ook worden gebruikt met de Navi- bibliotheek.

Rxpermissions

Deze bibliotheek staat het gebruik van RxJava toe met het nieuwe Android M-machtigingsmodel.

Voeg de bibliotheek toe aan de afhankelijkheden:

Rxjava

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

Rxjava2

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

Gebruik

Voorbeeld (met Retrolambda voor beknoptheid, maar niet vereist):

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

Lees meer: https://github.com/tbruyelle/RxPermissions .



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow