RxJava在Android中的简单用例

来源:互联网 发布:大数据案例 编辑:程序博客网 时间:2024/06/05 20:05

public class MainActivity extends Activity {
private static final String TAG = “MainActivity”;
private Handler backgroundHandler;

@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    BackgroundThread backgroundThread = new BackgroundThread();    backgroundThread.start();    backgroundHandler = new Handler(backgroundThread.getLooper());    findViewById(R.id.button_run_scheduler).setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            //点击事件引发            onRunSchedulerExampleButtonClicked();        }    });}/** * Observable (可观察者,即被观察者) * 被观察者 * subscribe (订阅 , 事件) * 订阅 * Observer (观察者) * 观察者, 观察者进行处理 * <p/> * Observable 和 Observer 通过 subscribe() 方法实现订阅关系, * 从而 Observable 可以在需要的时候 发出事件来通知 Observer。 * 被观察者 和观察者通过subscribe()方法实现订阅关系,  * 从而被观察者可以在需要的时候发出事件来通知观察者,观察者再做出处理 *这两个方法都是operator,因此它们可以像所有operator那样作用于任何的Observable */void onRunSchedulerExampleButtonClicked() {    sampleObservable()            // Run on a background thread 通过subscribeOn()来指定Observer的运行线程,            .subscribeOn(HandlerScheduler.from(backgroundHandler))            // Be notified on the main thread 通过observeOn()指定Subscriber的运行线 程            .observeOn(AndroidSchedulers.mainThread())            .subscribe(                    new Subscriber<String>() {                      //创建观察者                        //事件队列完结。RxJava 不仅把每个事件单独处理,还会把它们看做一个队列。                        //RxJava 规定,当不会再有新的 onNext() 发出时,需要触发 onCompleted() 方法作为标志。                        @Override                        public void onCompleted() {                            Log.d(TAG, "onCompleted()");                        }                        //事件队列异常。在事件处理过程中出异常时,onError() 会被触发,                        //同时队列自动终止,不允许再有事件发出。                        //在一个正确运行的事件序列中, onCompleted() 和 onError() 有且只有一个,                        //并且是事件序列中的最后一个。                        // 需要注意的是,onCompleted() 和 onError() 二者也是互斥的,                        //即在队列中调用了其中一个,就不应该再调用另一个。                        @Override                        public void onError(Throwable e) {                            Log.e(TAG, "onError()", e);                        }                        //进行数据处理                        @Override                        public void onNext(String string) {                            Log.d(TAG, "onNext(" + string + ")");                        }                    }            );}/** * 被观察者,  返回被观察者对象 * * @return */static Observable<String> sampleObservable() {    // 使用defer()来包装缓慢的代码:    return Observable.defer(new Func0<Observable<String>>() {        @Override        public Observable<String> call() {            try {                // Do some long running operation, 做一些耗时的操作,例如数据请求                Thread.sleep(TimeUnit.SECONDS.toMillis(5));            } catch (InterruptedException e) {                throw OnErrorThrowable.from(e);            }            //将数据返回,返回的是一个Observable<T>对象            return Observable.just("one", "two", "three", "four", "five");                  }    });}/** * 后台运行,  继承HandlerThread,  实际也就是Thread, 新开子线程 */static class BackgroundThread extends HandlerThread {    BackgroundThread() {        super("SchedulerSample-BackgroundThread", THREAD_PRIORITY_BACKGROUND);    }}

}

0 0