管理RxJava訂閱后內(nèi)存泄漏(內(nèi)存管理)
0.添加依賴
compile 'com.trello:rxlifecycle:1.0'
compile 'com.trello:rxlifecycle-components:1.0'
1.使用
- Activity 繼承 RxActivity、RxAppCompatActivity夜涕、RxFragmentActivity廷支。
- Fragment 繼承 RxFragment毕莱、RxDialogFragment箱舞。
2.bindToLifecycle():[Activity/Fragment 使用方法相同]
使用compose() 完成Observable發(fā)布的事件和當(dāng)前的組件綁定歼狼,實現(xiàn)生命周期同步锹锰。
從而實現(xiàn)當(dāng)前組件生命周期結(jié)束時芥炭,自動取消對Observable訂閱。
// 循環(huán)發(fā)送數(shù)字
Observable.interval(1, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
// 當(dāng)Activity結(jié)束掉以后恃慧,Observable停止發(fā)送數(shù)據(jù)园蝠,訂閱關(guān)系解除。
.compose(this.<Long>bindToLifecycle())
.subscribe(new Action1<Long>() {
@Override
public void call(Long aLong) {
tvResult.setText("時間計數(shù): " + aLong);
Log.d(TAG, "時間計數(shù)器: " + aLong);
}
});
3.bindUntilEvent():[Activity/Fragment 使用方法相同]
指定在Activity其他的生命狀態(tài)和訂閱關(guān)系保持同步痢士。
// 循環(huán)發(fā)送數(shù)字
Observable.interval(1, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
// 當(dāng)Activity 執(zhí)行 onDestroy() 方法時解除訂閱關(guān)系
.compose(this.<Long>bindUntilEvent(ActivityEvent.DESTROY))
.subscribe(new Action1<Long>() {
@Override
public void call(Long aLong) {
tvResult.setText("時間計數(shù): " + aLong);
Log.d(TAG, "時間計數(shù)器: " + aLong);
}
});
- ActivityEvent 中枚舉參數(shù):
CREATE
彪薛、START
、RESUME
怠蹂、PAUSE
陪汽、STOP
、DESTROY
- Fragment 中枚舉參數(shù):
ATTACH
褥蚯、CREATE
挚冤、CREATE_VIEW
、START
赞庶、RESUME
训挡、PAUSE
澳骤、STOP
、DESTROY_VIEW
澜薄、DESTROY
为肮、DETACH
2017-1-5 15:39:00