rxjava 学习1

第一天

初学rxjava,哪里写得不好的大家多多指教!

  • 第一天
    • 依赖导入
    • 小试牛刀
    • 解决问题
    • 注意事项


依赖导入

github rxjava
可以打出特别漂亮的日志的框架,额外推荐 logger

dependencies {
……
//rxjava
compile ‘io.reactivex:rxandroid:1.2.1’
compile ‘io.reactivex:rxjava:1.1.6’
//logger
compile ‘com.orhanobut:logger:1.15’
}

小试牛刀

 public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        // 通过create方法创建可观察对象(observable)
        Observable observable = Observable.create(new Observable.OnSubscribe() {
            @Override
            public void call(Subscribersuper String> subscriber) {
                //通过subscribeOn(Schedulers.io()) 来设置订阅线程

                //通过调用onNext()方法向主线程传输工作结果
                subscriber.onNext("s");
            }
        });
        //进行订阅(subscriber)
        observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Subscriber() {
            @Override
            public void onCompleted() {
                //通过observeOn(AndroidSchedulers.mainThread()) 来设置观察线程

            }

            @Override
            public void onError(Throwable e) {
                //通过observeOn(AndroidSchedulers.mainThread()) 来设置观察线程

            }

            @Override
            public void onNext(String s) {
                //通过observeOn(AndroidSchedulers.mainThread()) 来设置观察线程

                Logger.i("next");

            }
        });
        //Schedulers.io()为子线程
        //ndroidSchedulers.mainThread()为主线程



    }
}

解决问题

在android开发过程中我们经常会涉及到主线程工作线程的切换,或者是说当我们在子线程做完某项事情后需要通知主线程,以前涉及到用handler或者异步任务,写起来相对繁琐这里我们可以比较快捷的实现。

通过
observable.subscribeOn(Schedulers.io())来确定call()方法在子线程执行
通过
observable.observeOn(AndroidSchedulers.mainThread()) 来确定onError()、onNext()、onCompleted()主线程执行

注意事项

  • 若不设置线程默认都是在主线程中执行。
  • 仅仅创建了observable对象是不会执行任何的代码的,只有订阅后才会调用call()方法

你可能感兴趣的:(rxjava)