隨著Android第三庫的普及兰绣,RxJava和RxAndroid(https://github.com/ReactiveX/RxAndroid)越來越被人熟知房待,簡(jiǎn)潔的語法丰嘉,配合Java8 Lambda表達(dá)式洁灵,使代碼的結(jié)構(gòu)更加清晰房铭,通過線程調(diào)度器更容易控制和切換線程暮屡,種種優(yōu)點(diǎn)撤摸,使用它的人也越來越多。但是使用不好,很容易導(dǎo)致內(nèi)存泄露准夷。Rxlifecycle (https://github.com/trello/RxLifecycle)就使被用來嚴(yán)格控制由于發(fā)布了一個(gè)訂閱后钥飞,由于沒有及時(shí)取消,導(dǎo)致Activity/Fragment無法銷毀導(dǎo)致的內(nèi)存泄露衫嵌。
RxJava和RxAndroid
? ?compile'io.reactivex:rxjava:1.0.16'
Rxlifecycle
? ?compile'com.trello:rxlifecycle:0.3.0'
? ?compile'com.trello:rxlifecycle-components:0.3.0'
Rxlifecycle使用
Activity/Fragment需繼承RxAppCompatActivity/RxFragment读宙,目前支持的有RxAppCompatActivity、RxFragment楔绞、RxDialogFragment结闸、RxFragmentActivity。
一酒朵、bindToLifecycle()方法
在子類使用Observable中的compose操作符桦锄,調(diào)用,完成Observable發(fā)布的事件和當(dāng)前的組件綁定蔫耽,實(shí)現(xiàn)生命周期同步结耀。從而實(shí)現(xiàn)當(dāng)前組件生命周期結(jié)束時(shí),自動(dòng)取消對(duì)Observable訂閱匙铡。
Observable.interval(1, TimeUnit.SECONDS)? ? ? ? ? ? ? ?
.compose(this.bindToLifecycle())
.subscribe(new Action1() {
@Override
public void call(Long num) {
Log.i(TAG, "? " + num);
}
});
二图甜、bindUntilEvent()方法
使用ActivityEvent類,其中的CREATE慰枕、START具则、 RESUME、PAUSE具帮、STOP博肋、 DESTROY分別對(duì)應(yīng)生命周期內(nèi)的方法。使用bindUntilEvent指定在哪個(gè)生命周期方法調(diào)用時(shí)取消訂閱蜂厅。
Observable.interval(1,TimeUnit.SECONDS)?
.compose(this.bindUntilEvent(ActivityEvent.PAUSE))
.subscribe(mSub);