首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一篇博客让你了解RxJava

); 例子:来一个简单的例子来了解事件的产生到消费、订阅的过程:从res/mipmap取出一张图片,显示ImageView。...前调用的情况 当我们写两个onError,会先接受前面的所有事件,最后才报错 介绍了ObservableEmitter, 接下来介绍Disposable, 当调用dispose()方法,...RxJava, 当我主线程中去创建一个Observable来发送事件, 则这个Observable默认就在主线程发送事件....当我主线程去创建一个Observer来接收事件, 则这个Observer默认就在主线程接收事件,但其实在现实工作我们更多的是需要进行线程切换的,最常见的例子就是子线程请求网络数据,主线程中进行展示...); 这段代码就做一件事, io 线程加载一张网络图片,加载完毕之后主线程显示到ImageView

46320
您找到你想要的搜索结果了吗?
是的
没有找到

Angular 从入坑到挖坑 - HTTP 请求概览

项目中创建一个接口,按照后端返回的数据信息进行属性的定义,用来映射请求的响应信息(Angular 只能将请求响应对象转换成接口类型,不能自动转换成类实例) ng g interface interfaces...执行服务的方法,有时会存在没有回调函数的情况,此时也必须执行 subscribe 方法,否则服务的 HTTP 请求是没有真正发起的 服务的 getAntiMotivationalQuotes...因为这里是以默认的表单提交的方式进行的数据提交,当后端需要修改请求的 body 格式,则需要我们修改请求的 MIME 类型 当需要更改请求的 MIME 类型或是需要添加授权访问的 token 信息这一类的操作...}, this.httpOptions); } } 4.2、捕获错误信息 4.2.1、获取错误信息 涉及到前后端交互的过程,不可避免会出现各种状况,在出现错误时,可以 subscribe 方法...、转化,以及拦截请求的响应信息的双重效果,因此当我们注册了多个拦截器发送请求时会按照我们添加的顺序进行执行,而在接受到请求响应时,则是按照反过来的顺序进行执行 获取到导出的拦截器信息,就可以根模块中去导入需要注册的拦截器

5.3K10

Rxjava 2.x 源码系列 - 变换操作符 Map(

观察者接收事件,是接收到变换后的事件 = 字符串类型 }).subscribe(new Observer() { @Override public void onSubscribe...super U> t) { source.subscribe(new MapObserver(t, function)); } } 在前面博客,我们已经说到,当我们调用... observable 的 subscribeActual 方法 如果有上游的话,会调用上游的 subscribe 方法(即 source.subscribe() 方法),而在 subscribe...当我们调用 observable.subscribe(observer) 的时候 会促发第二个 Observable 的 subscribeAtActual 方法,该方法,又会调用上游 Observable...的包装类 parent 暴露出去 当我我们创建的 ObservableOnSubscribe 的 subscribe 方法,调用 emitter 的 onNext 方法的时候,这个时候会调用到我们的

39120

Android面试之EventBus

,例如: @Subscribe public void handleEvent(String event) { // do something } 其中,事件类型可以是 Java 已有的类型或者自定义的类型...Subscribe注解可以根据需求指定threadMode、sticky、priority三个属性。...核心的注册事件流程还是我们之前的register()方法subscribe()方法,前边分析subscribe()方法,有一段没有分析的代码,就是用来处理粘性事件的。...EventBus 注册,遍历stickyEvents,如果当前要注册的事件订阅方法是粘性的,并且该方法接收的事件类型和stickyEvents某个事件类型相同或者是其父类,则取出stickyEvents...Class 类型从 SUBSCRIBER_INDEX 查找对应的SubscriberInfo,如果我们注册类定义了订阅事件的方法,则 info不为空,进而上边findUsingInfo()方法findState.subscriberInfo

54210

【译】使用RxJava代替EventBus类库

当我们开始Android项目中使用RxJava的时候,就已经意识到了,我们的代码库可以不再需要Otto了(或其他事件总线类库)。...使用MVP构建代码库 当我开发一款叫做Radyoland的无线流媒体应用的时候,我们决定使用MVP模式来设计我们的代码库和项目架构等。...onFailure(Throwable t) { Timber.e(t.getMessage()); } }); } 当我们通过回调函数进行异步请求的时候,使用...**Activity **或者Fragment 应该在onResume()方法订阅需要的事件,相反地,onPause()对不需要的事件解除订阅。...那就是Android应用的代码库引入并使用RxJava和RxAndroid。 ? 如何使用RxJava 首先,我们需要更改所有REST接口的返回类型

41320

熔断器 Hystrix 源码解析 —— 执行结果缓存

这一步很关键,因为我们不希望缓存不存在,多个线程去执行命令,最好有且只有一个线程执行命令。 「5. HystrixCachedObservable」 详细解析。 第 77 行 :「6....第 87 至 91 行 :返回的 Observable ,订阅一些清理的处理逻辑。...当使用 THREAD 隔离, #subscribe(replaySubject) 调用完成,实际命令并未开始执行,或者说,这是一个异步的执行命令的过程。那么,会不会影响返回执行结果呢?...当使用 SEMAPHORE 隔离, #subscribe(replaySubject) 调用完成,实际命令已经执行完成,所以即使 AbstractCommand#toObservavle(...)...父类的基础,增加了对 AbstractCommand.executionResult 的关注。

1.1K70

【译】使用RxJava代替EventBus类库

当我们开始Android项目中使用RxJava的时候,就已经意识到了,我们的代码库可以不再需要Otto了(或其他事件总线类库)。...使用MVP构建代码库 当我开发一款叫做Radyoland的无线流媒体应用的时候,我们决定使用MVP模式来设计我们的代码库和项目架构等。...onFailure(Throwable t) { Timber.e(t.getMessage()); } }); } 当我们通过回调函数进行异步请求的时候,使用...Activity 或者Fragment 应该在onResume()方法订阅需要的事件,相反地,onPause()对不需要的事件解除订阅。...那就是Android应用的代码库引入并使用RxJava和RxAndroid。 ? 如何使用RxJava 首先,我们需要更改所有REST接口的返回类型

72920

Java微信公众平台开发(二)--微信服务器post消息体的接收

在上一篇的文章我们详细讲述了如何将我们的应用服务器和微信腾讯服务器之间的对接操作,最后接入成功,不知道你有没有发现在上一篇的【controller】我定义了一个get方法和一个post方法,但是使用过程我们就用了...当我完成了服务器验证之后,此后用户每次向公众号发送消息、或者产生自定义菜单点击事件,开发者填写的服务器配置URL将得到微信服务器推送过来的消息和事件,然后开发者可以依据自身业务逻辑进行响应,例如回复消息等...:微信服务端推送的所有消息体的类型格式都是xml格式; (二)消息重试机制 微信服务器五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。...} 164 } 165 }; 166 } 167 }); 168 } 当你试图自己电脑添加这个类...那么当我们在这里将我们代码发布之后再公众号发送消息,们的后台就能看到我们的消息体进入并解析成功了。

2.2K71

Android Vehicle HAL架构

VehicleHal获取/设置属性流程 5.1. subscribe订阅属性 5.2. subscribe序列图 5.3. set设置属性请求流程 5.4. get获取属性请求流程 5.5. set和get...: int32_t { //静态属性,不支持subscribe订阅,只能get获取 STATIC = 0x00, //ONCHANGE这个类型属性当变化时必须上报 /.../调用get接口获取当前值; //set接口是异步的,当属性读取(调用get接口)属性设置(调用set接口)之后,也有可能获取到的是旧值,除非从硬件反馈属性的确发送变化 //我们大多数属性都是这个类型...VehicleHal获取/设置属性流程 5.1. subscribe订阅属性 CarServiceonCreate创建ICarImpl,构造函数new VehicleHal对象,然后又在CarImpl...消息”类型的消息,会将消息转发至希望接收的进程 6.2.

5.7K33

Dubbo服务调用原理

从dubbo的架构设计,我们可以看出服务启动,除了本地暴露服务之外会把服务注册到注册中心,那么作为消费端,服务启动的时候则会向注册中心订阅需要调用的服务,然后调用的时候通过注册中心拿到的地址做负载后选择合适的服务...(url, this); } 此处的registry类型是ListenerRegistryWrapper,继续看其subscribe实现: @Override public void subscribe...然后检测用户配置的客户端类型是否存在,不存在则抛出异常。最后根据 lazy 配置决定创建什么类型的客户端。...Server 收到请求后,首先要做的事情是对数据包进行解码。然后将解码后的请求发送至分发器 Dispatcher,再由分发器将请求派发到指定的线程池上,最后由线程池调用具体的服务。...包装Invoker信息以及建立与服务端的Netty连接,然后调用远程服务,从集群Invoker通过负载均衡找到合适的Invoker,通过Netty的Channel发送请求数据,然后服务端接收到请求数据

1.2K83

开发中经常遇到的JavaScript问题整理(超实用)

length 属性的 // so (() => 1).length === 0; // 输出 true (a => a).length; // 输出 1 数组字符串键值的处理 JavaScript...数组是通过数字进行索引,但是有趣的是他们也是对象,所以也可以包含 字符串 键值和属性,但是这些不会被计算在数组的长度(length)内 如果字符串键值能够被强制类型转换为十进制数字的话,它就会被当做数字索引来处理...当 replacer 是一个数组,那么他必须是一个字符串数组,其中包含序列化要处理的对象的属性名称,除此之外的属性就会被忽略 const obj = { a: 42, b: 30, c:...100, }; JSON.stringify(obj, ['a', 'c']); // {"a":42,"c":100} 当 replacer 是一个函数,他会对对象本身调用一次,然后在对对象的每个属性各调用一次...api 不止存在 Number 的原型,Array、Object、Date 原型都有这个 api,并且格式化出来的值可以根据我们传入的参数出现各种结果 参数及用法可以参考 MDN 深度冻结对象

1.5K10

Apache Dubbo 2.7孵化版整理 顶

基本现在主流的注册模式都有了。 ? 这种一看就是模版方法模式,其中Registry接口继承与两个接口Node,RegistryService,它自己本身没有任何方法。 /** * Node....*/ void subscribe(URL url, NotifyListener listener); /** * 取消订阅 */ void unsubscribe...Set registered = new ConcurrentHashSet(); 这个URL是Dubbo自己封装的一个类,其中包含了例如协议、用户名、密码、主机、端口号、路径、参数等的属性...此处可以看到订阅对象是一个URL对应一组监听器 @Override public void subscribe(URL url, NotifyListener listener) { if (url...()) { logger.info("Subscribe: " + url); } //如果订阅对象没有该url的键,则创建该键对应的集合,集合添加监听器listener

53510

Rxjs&Angular-退订可观察对象的n种方式

方式一 "常规"的取消订阅的方式 最简单的订阅和取消订阅一个可观察对象的方式是 ngOnInit 方法订阅可观察对象(Observable), 然后组件类创建一个类属性用来保存这个订阅(Subscription...但是当我们有多个订阅对象(Subscription), 针对每一个我们都需要在组件类创建一个字段保存这个对象的的引用并在 ngOnDestroy 调用 unsubscribe来取消订阅....我们的示例, 我们希望组件被销毁后发出通知, 所以我们给组件类添加一个叫 componentDestroyed$ 的字段, 它的类型是 Subject, 这个字段承担了通知人(notifier....next(); } } 与之前常规的方式相比, 这种方式我们有多个订阅对象不必组件类创建多个字段保存对订阅对象的引用....然后组件类创建一个SubSink类型的字段. SubSink有两种方式, 一种是简单技术(使用sink属性设置器), 另一种是 数组/添加(Array/Add)技术.

1.2K00

Android RxJava+Retrofit完美封装(缓存,请求,生命周期管理)

并在OkHttp的拦截器增加了请求头。...RxJava那么多操作符看到我身体不适,有个操作符compose。因为我们每一个请求中都会处理code以及一些重用一些操作符,比如用observeOn和subscribeOn来切换线程。...处理ProgressDialog Rxjava我们什么时候来显示Dialog呢。一开始觉得是放在Subscriber的onStart。onStart可以用作流程开始前的初始化。...然而 onStart()由于 subscribe()发生就被调用了,因此不能指定线程,而是只能执行在 subscribe()被调用时的线程。所以onStart并不能保证永远在主线程运行。...要实现上面的功能其实很简单,两部分 随时监听Activity(Fragment)的生命周期并对外发射出去; 我们的网络请求,接收生命周期 并进行判断,如果该生命周期是自己绑定的,如Destory,那么就断开数据向下传递的过程

3.1K11
领券