NavUtil
利用 NavUtil,你可以在 Activity 或 Fragment 的生命周期发生变化时,停止订阅你的 Observable。
Usage
首先,需要初始化 NavUtil 单例
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
NavUtil.init(this);
}
}
然后,在Activity 中,为你的 Observable 应用 compose 操作符,如下所示:
Observable.interval(1, TimeUnit.SECONDS)
.compose(NavUtil.<Long>subscribeUtilEvent(this, LifecycleEvent.ON_STOPPED))
.subscribe(new Subscriber<Long>() {
@Override
public void onCompleted() {
Log.d(TAG, "onStart onCompleted() called");
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "onStart onError() called with: e = [" + e + "]");
}
@Override
public void onNext(Long aLong) {
Log.d(TAG, "onStart onNext() called with: aLong = [" + aLong + "]");
}
});
在 Fragment 中的用法如下所示:
Observable.interval(1, TimeUnit.SECONDS)
.compose(NavUtil.<Long>subscribeUtilEvent(this, LifecycleEvent.ON_PAUSED))
.subscribe(new Subscriber<Long>() {
@Override
public void onCompleted() {
Log.d(TAG, "onCompleted() called");
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "onError() called with: e = [" + e + "]");
}
@Override
public void onNext(Long aLong) {
Log.d(TAG, "onNext() called with: aLong = [" + aLong + "]");
}
});
目前支持的生命周期事件如下所示:
public enum LifecycleEvent {
ON_PAUSED,
ON_STOPPED,
ON_SAVE_INSTANCE_STATE,
ON_DESTROYED,
ON_VIEW_DESTORYED,
ON_DETACHED,
}
Gradle
compile 'com.legendmohe.maven:navutil:x.y'
查看原文:http://legendmohe.net/2017/01/23/android-%e5%a6%82%e4%bd%95%e5%9c%a8-activity-%e6%88%96%e8%80%85-fragment-%e7%9a%84%e7%94%9f%e5%91%bd%e5%91%a8%e6%9c%9f%e7%bb%93%e6%9d%9f%e6%97%b6%e5%81%9c%e6%ad%a2%e8%ae%a2%e9%98%85-observable/