Rxjava1源码学习

使用泛型的super和 extends的区别。

使用泛型的存取原则

如果你想从一个数据类型中获取数据,就使用? extends X。因为在存的时候,无法确定添加的具体是哪个子类。但是在取的时候,我们能确定肯定是X或是其子类。

如果想把数据写入一个数据结构中,就使用? super X。因为在取的时候,不能确定到底超类是什么。?就是父类。但是在存的时候,我们能确定肯定能存入X及其它的子类。

如果想同时存和取,就不使用泛型。

 

一、观察订阅的简单流程(1)

使用Observable有两个创建对象的方法,create()和subscribe()。

在create()中创建被观察的对象,也就是想要完成的任务,在subscrible()中创建具体的完成任务的对象。

在subscrible()方法中会执行OnSubscrible对象的call方法,并且将Subscrible对象传递过去,然后在call()中执行subscrible().onNext()

 

二、观察订阅的简单流程(2)

最初仍然是在create()创建了观察者Observable对象,但是在map()方法中重新创建了一个Observable对象,因此在subscrible()虽然内部调用了onSubscrible.call()方法,但是和上面的相比,observable对象改变了。因此并不是直接调用截图上的OnSubscrible()的call()方法。

而是调用了重新创建的Observable对象的OnSubscribleLift对象的call()。

在新创建的Observable对象中传入了最初的OnSubscrible对象引用。然后在call()方法中调用这个对象引用的call()方法。

开始回调到subscrible.onNext()

注意这个时候的subscrible对象并不是在主页面subscrible对象,而事在map中创建的MapSubscrible对象。这时候调用这个对象的onNext()。

在这里的transform就是在首页中的创建的func1对象,然后调用call(),这样就执行了首页的call里面的方法

并且执行完毕后紧接着执行actual.onNext()的方法,最终是调用了

这样就执行完毕整个步骤。

 

也就是说map就是将数据原材料进行加工的处理的过程。

https://blog.csdn.net/sqm8822/article/details/79142458

 

可以利用 subscribeOn() 结合 observeOn() 来实现线程控制,让事件的产生和消费发生在不同的线程。能不能多切换几次线程?

能。因为 observeOn() 指定的是 Subscriber 的线程,而这个 Subscriber 并不是(严格说应该为『不一定是』,但这里不妨理解为『不是』)subscribe() 参数中的 Subscriber ,而是 observeOn() 执行时的当前 Observable 所对应的 Subscriber ,即它的直接下级 Subscriber 。换句话说,observeOn() 指定的是它之后的操作所在的线程。因此如果有多次切换线程的需求,只要在每个想要切换线程的位置调用一次 observeOn() 即可。上代码:

Observable.just(1, 2, 3, 4) // IO 线程,由 subscribeOn() 指定

    .subscribeOn(Schedulers.io())    //这个起作用,但是如果使用多次,那么后面的是没有作用的。

    .observeOn(Schedulers.newThread())

    .map(mapOperator) // 新线程,由 observeOn() 指定

    .observeOn(Schedulers.io())

    .map(mapOperator2) // IO 线程,由 observeOn() 指定

    .observeOn(AndroidSchedulers.mainThread)

    .subscribe(subscriber);  // Android 主线程,由 observeOn() 指定

 

使用subscribeOn()时,如果使用多次,那么只有第一次是有效果的。但是如果是使用observeOn()那么就会影响下一步执行的代码。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值