当前位置: 首页 > news >正文

购物网站的设计思路/网店培训班

购物网站的设计思路,网店培训班,建筑网课平台,wordpress文章页头添加广告代码介绍 RxJava,响应式编程,告别AsyncTask,与Retrofit组成了日常开发经典组合。之前,好读书不求甚解得态度,让我对其印象并不深刻,知识层面比较浅薄。为了加深印象,重新学习。 添加依赖 impleme…

介绍

RxJava,响应式编程,告别AsyncTask,与Retrofit组成了日常开发经典组合。之前,好读书不求甚解得态度,让我对其印象并不深刻,知识层面比较浅薄。为了加深印象,重新学习。

添加依赖

implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
implementation 'io.reactivex.rxjava2:rxjava:2.1.7'

举个栗子

1. 上游和下游(被观察者和观察者)

Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() {@Overridepublic void subscribe(ObservableEmitter<Integer> e) throws Exception {e.onNext(111);e.onNext(222);e.onComplete();}
});Observer<Integer> observer = new Observer<Integer>() {@Overridepublic void onSubscribe(Disposable d) {Logger("onSubscribe");}@Overridepublic void onNext(Integer integer) {Logger("onNext integer = " + integer);}@Overridepublic void onError(Throwable e) {Logger("onError e = " + e.getMessage());}@Overridepublic void onComplete() {Logger("onComplete");}
};
observable.subscribe(observer);

2. 运行结果

这里写图片描述

3. 流程

  1. 创建Observable
  2. 创建Observer
  3. Observerable订阅(subscribe)Observer

4. Observable

Observable是一个抽象类,实现ObservableSource接口

public abstract class Observable<T> implements ObservableSource<T> 

而ObservableSource接口中只有一个订阅方法

public interface ObservableSource<T> {/*** Subscribes the given Observer to this ObservableSource instance.* @param observer the Observer, not null* @throws NullPointerException if {@code observer} is null*/void subscribe(@NonNull Observer<? super T> observer);
}

通过create方法创建Observable,稍微追下源码,帮助理解

    public static <T> Observable<T> create(ObservableOnSubscribe<T> source) {ObjectHelper.requireNonNull(source, "source is null");return RxJavaPlugins.onAssembly(new ObservableCreate<T>(source));}

参数类型为ObservableOnSubscribe接口

public interface ObservableOnSubscribe<T> {/*** Called for each Observer that subscribes.* @param e the safe emitter instance, never null* @throws Exception on error*/void subscribe(@NonNull ObservableEmitter<T> e) throws Exception;
}

ObservableEmitter可以理解成发射器,看下它的源码。它继承Emitter。而Emitter中才是我们最基础最常用的功能。

public interface ObservableEmitter<T> extends Emitter<T> {void setDisposable(@Nullable Disposable d);void setCancellable(@Nullable Cancellable c);boolean isDisposed();ObservableEmitter<T> serialize();@Experimentalboolean tryOnError(@NonNull Throwable t);
}

上面这部分代码,删除了部分注释,可在源码中查阅。

public interface Emitter<T> {/*** Signal a normal value.* @param value the value to signal, not null*/void onNext(@NonNull T value);/*** Signal a Throwable exception.* @param error the Throwable to signal, not null*/void onError(@NonNull Throwable error);/*** Signal a completion.*/void onComplete();
}

从上面Emitter的代码可以看出,我们可以发射三种消息:
onNext, onComplete, onError。从语义上就很容易看出他们的作用。
针对三个事件,做一些说明:
1. 发射器可以发送无限个onNext, Observer也可以接收无限个onNext。
2. 发射器发送一个onComplete后, onComplete之后的事件将会继续发送, 而Observer收到第一个onComplete事件之后将不再继续接收事件。
3. 发射器发送了一个onError后, onError之后的事件将继续发送, 而Observer收到onError事件之后将不再继续接收事件.
4. 发射器可以不发送onComplete或onError。
5. 发射器不能同时发出onComplete和onError。
6. 不允许发出多个onError或者onComplete

5. Observer

相对于Observable而言,Observer就简单很多,我们只需要针对我们感兴趣的事件作出相应的处理即可。

public interface Observer<T> {void onSubscribe(@NonNull Disposable d);void onNext(@NonNull T t);void onError(@NonNull Throwable e);void onComplete();
}

这里有一个新内容Disposable,先看代码,“象征一个一次性资源”,从注释上看是这个意思。但是如何理解?

/*** Represents a disposable resource.*/
public interface Disposable {/*** Dispose the resource, the operation should be idempotent.*/void dispose();/*** Returns true if this resource has been disposed.* @return true if this resource has been disposed*/boolean isDisposed();
}

看个栗子:

Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() {@Overridepublic void subscribe(ObservableEmitter<Integer> e) throws Exception {e.onNext(111);e.onNext(222);e.onNext(333);e.onComplete();e.onNext(444);}
});Observer<Integer> observer = new Observer<Integer>() {Disposable mDisposable;@Overridepublic void onSubscribe(Disposable d) {Logger("onSubscribe");mDisposable = d;}@Overridepublic void onNext(Integer integer) {Logger("onNext integer = " + integer);if(integer== 222 && !mDisposable.isDisposed()) {mDisposable.dispose();}}@Overridepublic void onError(Throwable e) {Logger("onError e = " + e.getMessage());}@Overridepublic void onComplete() {Logger("onComplete");}
};
observable.subscribe(observer);

运行结果:
这里写图片描述
可以看到发射器发送了222之后,剩下的事件Observer并没有处理,那么剩下的事件发射器有没有发送呢?在发射器发射事件之前添加log。
这里写图片描述
可以看到发射器的事件并没有受到Disposable影响,只是Observer没有接收到222之后的事件而已。
Disposable的作用应该是,截断发射器与Observer之间的事件通道。

最后

【码道长】,一周一更,内容充实。
这里写图片描述

http://www.lbrq.cn/news/1613143.html

相关文章:

  • 网站单页推广/seo技术专员招聘
  • 网页传奇哪个比较好玩/seo网站优化优化排名
  • 做外贸在什么网站最好/seo网络优化公司
  • 建设银行南通通州支行网站/文案写作软件app
  • 株洲的网络营销公司有哪些/seo搜索引擎优化实训总结
  • 汉中专业网站建设推广/带佣金的旅游推广平台有哪些
  • 廊坊seo建站/推广普通话的意义是什么
  • 前端怎么做自己的博客网站/东莞seo优化排名推广
  • 网站制作方案垂直领域获客/店铺推广引流的方法
  • 华强北网站建设/seo检查工具
  • 贵阳网站建设哪家/微信推广图片
  • wordpress 伪娘/班级优化大师怎么加入班级
  • wordpress上传图片/爱站网seo培训
  • 网站开发自我介绍代码/郑州网站建设推广
  • 游戏推广犯法吗/宁波seo如何做推广平台
  • 网站建设宣传语怎么写/国外免费ip地址
  • 空间网站链接怎么做/爱站网查询
  • 新网站如何做seo推广/做一个微信小程序需要多少钱
  • 做网站营销怎么去推广/江苏搜索引擎优化
  • 大连网站建设选网龙/云优化seo软件
  • 汉川市城乡建设局网站/青岛seo招聘
  • 山东泰安特产/优化关键词排名哪家好
  • 北京住房建设委员会官方网站/百度关键词排名代发
  • 宝塔做两个网站6/宁波关键词优化品牌
  • 网站建设系统 招标/品牌宣传活动策划方案
  • 上海网站开发制作公司/seo排名
  • 旅游类网站怎么做/南京seo公司
  • 贵德网站建设/推广渠道有哪些
  • 个人网站要备案么/外贸推广有哪些好的方式
  • 一家做公司点评网站/一份完整的品牌策划方案
  • 【一天一个知识点】RAG遇见推理
  • ubuntu22.04离线一键安装gpu版docker
  • RAWINPUT避坑指南(涉及GetRawInputData/GetRawInputBuffer)
  • 【REACT18.x】使用vite创建的项目无法启动,报错TypeError: crypto.hash is not a function解决方法
  • 如何优雅删除Docker镜像和容器(保姆级别)
  • 【Shell脚本自动化编写——报警邮件,检查磁盘,web服务检测】