rx-java
Android med RxJava
Sök…
Anmärkningar
RxAndroid var tidigare ett bibliotek med många funktioner. Det har delats upp i många olika bibliotek som går från version 0.25.0 till 1.x.
En lista över bibliotek som implementerar de funktioner som finns innan 1.0 bibehålls här .
RxAndroid - AndroidSchedulers
Detta är bokstavligen det enda du behöver för att börja använda RxJava på Android.
Inkludera RxJava och RxAndroid i dina gradberoende:
// use the last version
compile 'io.reactivex.rxjava2:rxjava:2.1.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
RxAndroid huvudtillägg till RxJava är en schemaläggare för Android Main Thread eller UI Thread.
I din kod:
Observable.just("one", "two", "three", "four", "five")
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
data -> doStuffOnMainThread(),
error -> handleErrorOnMainThread()
)
Eller så kan du skapa en schemaläggare för en anpassad Looper :
Looper backgroundLooper = // ...
Observable.just("one", "two", "three", "four", "five")
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.from(backgroundLooper))
.subscribe(
data -> doStuffOnMainThread(),
error -> handleErrorOnMainThread()
)
För de flesta allt annat kan du hänvisa till standard RxJava-dokumentation.
RxLifecycle-komponenter
RxLifecycle- biblioteket gör det enklare att binda observerbara prenumerationer på Android-aktiviteter och fragmentlivscykel.
Kom ihåg att glömma att avsluta prenumerationen på en observerbar kan orsaka minnesläckor och hålla din aktivitet / fragment levande efter att det har förstörts av systemet.
Lägg till biblioteket i beroenden:
// use the last version available
compile 'com.trello:rxlifecycle:0.6.1'
compile 'com.trello:rxlifecycle-components:0.6.1'
Utökar sedan Rx* -klasser:
-
RxActivity/support.RxFragmentActivity/support.RxAppCompatActivity -
RxFragment/support.RxFragment -
RxDialogFragment/support.RxDialogFragment -
support.RxAppCompatDialogActivity
Du är redo, när du prenumererar på en observerbar kan du nu:
someObservable
.compose(bindToLifecycle())
.subscribe();
Om du kör detta i onCreate() för aktiviteten kommer den automatiskt att avskrivas i onDestroy() .
Samma sak händer för:
-
onStart()->onStop() -
onResume()->onPause() -
onAttach()->onDetach()(endast fragment) -
onViewCreated()->onDestroyView()(endast fragment)
Som ett alternativ kan du ange händelsen när du vill att prenumerationen ska ske:
Från en aktivitet:
someObservable
.compose(bindUntilEvent(ActivityEvent.DESTROY))
.subscribe();
Från ett fragment:
someObservable
.compose(bindUntilEvent(FragmentEvent.DESTROY_VIEW))
.subscribe();
Du kan också få den livscykel som kan observeras med metodens lifecycle() att lyssna på livscykelhändelser direkt.
RxLifecycle kan också användas direkt för att överföra den livscykel som kan observeras:
.compose(RxLifecycleAndroid.bindActivity(lifecycle))
Om du behöver hantera Single eller Completable du göra det genom att bara lägga till respektive forSingle() eller forCompletable efter bindningsmetoden:
someSingle
.compose(bindToLifecycle().forSingle())
.subscribe();
Det kan också användas med Navi- biblioteket.
Rxpermissions
Detta bibliotek tillåter användning av RxJava med den nya Android M-tillståndsmodellen.
Lägg till biblioteket i beroenden:
Rxjava
dependencies {
compile 'com.tbruyelle.rxpermissions:rxpermissions:0.8.0@aar'
}
Rxjava2
dependencies {
compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.8.1@aar'
}
Användande
Exempel (med Retrolambda för korthet, men inte obligatoriskt):
// 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
}
});
Läs mer: https://github.com/tbruyelle/RxPermissions .