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
- RxJava在Android中的简单用例
- Rxjava 在项目中的简单使用
- rxjava系列(三)-- rxjava在Android中的应用
- RxJava 在Android中的应用(一)
- RxJava 在Android中的应用(二)
- RxJava在Android Data Binding中的运用
- retrofit2 RxJava在android中的使用
- RXJAVA 在android 项目中的借鉴经验
- RxJava+Retrofit+OkHttp组合在网络请求中的简单配置
- Android中的RxJava详解
- Android中的RxJava
- RxJava初步了解和在Android中的使用
- (一)RxJava在Android网络框架中的使用
- RxJava zip操作符在Android中的实际使用场景
- RxJava zip操作符在Android中的实际使用场景
- RxJava zip操作符在Android中的实际使用场景
- android rxjava的简单使用
- 在Android中应用Rxjava
- Java cookie和session介绍与区别
- Install OpenCV 3.0 and Python 2.7+ on OSX
- 图表引擎 - AChartEngine
- jquery使页面返回到顶部代码
- 地图引擎 - OSMDroid
- RxJava在Android中的简单用例
- 现代JVM内存管理方法及GC的实现和主要思路
- Mac os X下使用Nginx跟PHP的连接问题
- cookie详解
- iOS开发证书无效解决办法
- 图片控件 - GifView
- Android项目学习
- listview精确监听向上向下的滚动
- 打印二进制位