RxAndroid

https://github.com/ReactiveX/RxAndroid

生命週期的連動。

AppObservable

AppObservable.bindActivity()
AppObservable.bindFragment()

主要檢查 Fragment.isAdded(), Activity.isFinishing()

註:筆者不是很清楚,為什麼不用 overloading: AppObservable.bind(Activity/Frgment/v4.Fragment) 來取代 AppObservable.bindFragment(Fragment), AppObservable.bindFragment(v4.Fragment), AppObservable.bindActivity(Activity)

LifecycleObservable

LifecycleObservable.bindActivityLifecycle()
LifecycleObservable.bindFragmentLifecycle()

當 Activty/Fragment 對應的生命週期結束時,自動 unsubscribe()

LifecycleObservable 哪時候訂閱哪時候取消對照表:

CREATE -> LifecycleEvent.DESTROY;
START -> LifecycleEvent.STOP;
RESUME -> LifecycleEvent.PAUSE;
PAUSE -> LifecycleEvent.STOP;
STOP -> LifecycleEvent.DESTROY;

手動自己 unsubscribe(), 如果 Activity 要結束,把一些 subscriptions 取消:

class SimpleActivity extends Activity {
    CompsotionSubscription mSubscriptions = new CompositeSubscription();

    @Override
    protected void onResume() {
        super.onResume();

        bind(Observable.just("Hello, world"), s -> textView.setText(s));
    }

    protected <T> void bind(Observable<T> obs, Action1<T> onNext) {
        mCompositeSubscription.add(AppObservable.bindActivity(this, obs).subscribe(onNext));
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        mCompositeSubscription.unsubscribe();
    }
}

LifecycleObservable + RxActivity:

class SimpleActivity extends RxActivity {

    @Override
    public void onResume() {
        LifecycleObservable.bindActivityLifecycle(lifecycle(),
            AppObservable.bindActivity(this, Observable.just("Hello, world")))
        ).subscribe(s -> textView.setText(s));
    }
}

ViewObservable, WidgetObservable

View 的連動. 當 View 顯示時 subscribe() 離開時 unsubscribe()

ViewObservable.bindView()

Event 的連動.

ViewObservable.clicks()

RxLifecycle

See Also

註:並沒有 RxAppCompatActivity