Rxjava这个名字,其中java代表java语言,而Rx是什么意思呢?Rx是Reactive Extensions的简写,翻译过来就是,响应式拓展。所以Rxjava的名字的含义就是,对java语言的拓展,让其可以实现对数据的响应式编程。
Rx是Reactive Extensions的缩写的简写,可以使用可观察数据流对编程接口进行异步编程,它结合了观察者模式,迭代器模式和函数式的精华。
Rxjava是一种异步数据处理库,也是一种观察者模式。最早是Netflix公司用于重构当前架构时减少REST调用的次数,参考了Microsoft公司的响应式编程,把Microsoft的Rx库迁移到Java JVM中,其中最有名的就是RxJava。
它的特点主要有以下:
在开发项目的时候,开发者在使用Rxjava时会搭配RxAndroid,他是针对Rxjava在Android平台使用的一个响应式扩展组件。使用RxAndroid的Schedulers(调度器)可以解决Android主线程问题, 多线程等问题。
其实RxJava中最重要的操作符,它可以在订阅的过程中进行各种转化,下面以Map操作符为例子来进行说明,Map操作符本身就是一个映射的关系
mText.append("\n 输入参数: 1,2,3,4,5,6 \n");
Observable.from(number) //之前提到的创建Observable方法
.map(new Func1() {
@Override
public Boolean call(Integer integer) {
mText.append("\n\n map() Integer--->Boolean");
return (integer<3);
}
})
.subscribe(new Action1() {
@Override
public void call(Boolean aBoolean) {
mText.append("\n观察到输出结果:\n");
mText.append(aBoolean.toString());
}
});
这里的Map进行了类型的转换,将int转变成嗯boolean类型的
这个是异步的关键,用来在主线程和子线程之间进行切换
Observable.create(new Observable.OnSubscribe(){
@Override
public void call(Subscriber super Drawable> subscriber) {
sb.append(" Observable.create(): 线程: "+Thread.currentThread().getName()+"\n\n");
Drawable dd=getResources().getDrawable(R.mipmap.gril);
subscriber.onNext(dd);
subscriber.onCompleted();
}
}).subscribeOn(Schedulers.io())
.observeOn(Schedulers.newThread())
.map(new Func1() {
@Override
public ImageView call(Drawable drawable) {
sb.append("map(): drawable -->imageview 的线程: "+Thread.currentThread().getName()+"\n\n");
ImageView img=new ImageView(RxSchuderActivity.this);
LinearLayout.LayoutParams params= new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
img.setLayoutParams(params);
img.setImageDrawable(drawable);
return img;
}
}).observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1() {
@Override
public void call(ImageView imageView) {
sb.append("call(): 线程: "+Thread.currentThread().getName()+"\n");
mText.setText(sb);
mLinearlayout.addView(imageView);
}
});
实际上线程调度只有subscribeOn()和observeOn()两个方法。对于初学者,只需要掌握两点:
subscribeOn()它指示Observable在一个指定的调度器上创建(只作用于被观察者创建阶段)。只能指定一次,如果指定多次则以第一次为准
observeOn()指定在事件传递(加工变换)和最终被处理(观察者)的发生在哪一个调度器。可指定多次,每次指定完都在下一步生效。
线程调度掌握到这个程度,在入门阶段时绝对够用的了。
上面这段代码是对Rxjava简单的使用,其中
2022-12-18 13:54:12.450 29223-29223/com.hfhuaizhi.rxjavatest E/hftest: onSubscribe
2022-12-18 13:54:12.451 29223-29223/com.hfhuaizhi.rxjavatest E/hftest: onSuccess:hfhuaizhi
可以看到首先onSubscribe被调用,表明注册了观察者。然后接收数据成功,打印出’hfhuaizhi’。 到这里我们就了解了Rxjava最基本的用法,接下来分析一下函数的内部做了什么。有关Android的架构技术进阶可以参考《Android核心技术笔记》点击就可以查看到详细的板块了。