RxJava2,作为移动开发程序员应该怎样去规划自己的学习路线

void onSubscribe(@NonNull Disposable d);

void onNext(@NonNull T t);

void onError(@NonNull Throwable e);

void onComplete();

}

3.subscribe()建立订阅关系

(1)Observable.subscribe()方法

public final void subscribe(Observer<? super T> observer) {

//校验输入的观察者不能为null

ObjectHelper.requireNonNull(observer, “observer is null”);

try {

//这里直接理解为返回传入的观察者

//和上面创建被观察者逻辑一样

observer = RxJavaPlugins.onSubscribe(this, observer);

ObjectHelper.requireNonNull(observer, “The RxJavaPlugins.onSubscribe hook returned a null Observer. Please change the handler provided to RxJavaPlugins.setOnObservableSubscribe for invalid null returns. Further reading: https://github.com/ReactiveX/RxJava/wiki/Plugins”);

//直接调用ObservableCreate的subscribeActual()方法,这个方法传入了一个观察者。

subscribeActual(observer);

} catch (NullPointerException e) { // NOPMD

throw e;

} catch (Throwable e) {

Exceptions.throwIfFatal(e);

// can’t call onError because no way to know if a Disposable has been set or not

// can’t call onSubscribe because the call might have set a Subscription already

RxJavaPlugins.onError(e);

NullPointerException npe = new NullPointerException(“Actually not, but can’t throw other exceptions due to RS”);

npe.initCause(e);

throw npe;

}

}

由上述代码我们可以知道,当我们调用subscribe()方法建立订阅关系的时候,其实就是调用我们第一步创建的ObservableCreate对象内部重写的subscribeActual()方法传入了一个观察者,下面我们来分析subscribeActual()方法的实现。

(2).ObservableCreate.subscribeActual()

protected void subscribeActual(Observer<? super T> observer) {

//通过传入的观察者对象创建一个事件发射器

CreateEmitter parent = new CreateEmitter(observer);

//调用观察者的onSubscribe()方法,传入一个发射器。

observer.onSubscribe(parent);

try {

//source对象,就是传入的被ObservableOnSubscribe对象

//调用它的subscribe()方法传入一个事件发射器

source.subscribe(parent);

} catch (Throwable ex) {

Exceptions.throwIfFatal(ex);

parent.onError(ex);

}

}

(3)new CreateEmitter(observer)

下面我们来看看CreateEmitter的内部实现。

static final class CreateEmitter

extends AtomicReference

implements ObservableEmitter, Disposable {

private static final long serialVersionUID = -3434801548987643227L;

final Observer<? super T> observer;

CreateEmitter(Observer<? super T> observer) {

this.observer = observer;

}

@Override

public void onNext(T t) {

if (t == null) {

onError(new NullPointerException(“onNext called with null. Null values are generally not allowed in 2.x operators and sources.”));

return;

}

if (!isDisposed()) {

//调用观察者的onNext()方法

observer.onNext(t);

}

}

@Override

public void onError(Throwable t) {

if (!tryOnError(t)) {

RxJavaPlugins.onError(t);

}

}

@Override

public boolean tryOnError(Throwable t) {

if (t == null) {

t = new NullPointerException(“onError called with null. Null values are generally not allowed in 2.x operators and sources.”);

}

if (!isDisposed()) {

try {

observer.onError(t);

} finally {

dispose();

}

return true;

}

return false;

}

@Override

public void onComplete() {

if (!isDisposed()) {

try {

observer.onComplete();

} finally {

dispose();

}

}

}

@Override

public void setDisposable(Disposable d) {

DisposableHelper.set(this, d);

}

@Override

public void setCancellable(Cancellable c) {

setDisposable(new CancellableDisposable©);

}

@Override

public ObservableEmitter serialize() {

return new SerializedEmitter(this);

}

@Override

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

实战系列

话不多说,Android实战系列集合都已经系统分类好,由于文章篇幅问题没法过多展示


,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
[外链图片转存中…(img-mlHfT06O-1711803666598)]

实战系列

话不多说,Android实战系列集合都已经系统分类好,由于文章篇幅问题没法过多展示

[外链图片转存中…(img-chGG6dAc-1711803666599)]
[外链图片转存中…(img-j68JcgKT-1711803666599)]

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值