王学岗RxJava(一)

1,什么是响应式编程
响应式编程,是一种基于异步数据流概念的编程模式;数据流像河流一样可以被观测、过滤,操作!
2,Java里面提供了解决方案–RxJava,Reactive Extension Java
3,RxJava整体架构设计,我在这里推荐两篇篇文章介绍其架构设计的,写的很棒!
一: http://www.devtf.cn/?tag=rxjava
二:http://gank.io/post/560e15be2dca930e00da1083
第一篇文章让人蛋疼的是作者采用了很多JDK1.8新特性,大家学习前可以先看看1.8新特性。
整体上看架构设计是观察者模式,除此外,还用到了代理模式,迭代器,Builder模式;
4, RxJava框架的角色划分
Observable(被观察者)
Observer(观察者)
Subscriber:订阅
Subjects:科目
我们通过微信这个例子来理解下这四个角色:
微信公众号:
Observable:微信公众号服务器(生产者)
Observer:具体用户(消费者)
Subjects:科目(企业号、服务号、订阅号)(生产者)
Subscriber:桥梁,又比如手机是异地通话的桥梁(消费者)
5 Action是没有返回值的回调接口 而Function是有返回值的回调接口

```
public interface Action1<T> extends Action {
    void call(T t);

`
` public interface OnSubscribe<T> extends Action1<Subscriber<? super T>> {
        // cover for generics insanity
    }`

OnSubscribe实现了Action接口
Action0 有0个参数,Action1,有一个参数,ActionN有N个参数;所以Action规定了你要回调的参数;FunctionAction相同,只是call方法有返回值;

6冷和热的区分
这里写图片描述热:主动
场景:容器中目前只有1个观察者,向所有的观察者发送数据3条数据,因为热Observables一旦创建就立马发送消息,假设我现在发送到了第二条数据,突然之后增加了一个观察者,这个时候,第二个观察者就收不到之前的消息
冷:被动
场景:容器中目前只有1个观察者,向所有的观察者发送数据3条数据,因为冷Observables一旦创建就会等待观察者订阅,一定有观察者订阅了,我立马将所有的消息发送给这个观察者(订阅人)

package com.tz.architect.rxjava.simple.android.simple2;

import rx.Observable;
import rx.Observer;
import rx.Subscriber;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

import com.tz.architect.rxjava.simple.android.R;

public class RxJavaSimple2 extends Activity {
    private Observable<String> observableString;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_simple2);

        // 创建一个被观察者
        // 配置回调接口---OnSubscribe
        // 为什么要配置?
        // 监听观察者订阅,一旦有观察者订阅了,立马回调改接口
        observableString = Observable
                .create(new Observable.OnSubscribe<String>() {
                    @Override
                    public void call(Subscriber<? super String> observer) {
                        Log.i("main", "回到了");
                        // 所以在这个方法里面我们可以干一些事情
                        // 进行数据通信(说白了就是通知观察者)
                        for (int i = 0; i < 5; i++) {
                            observer.onNext("第" + i + "个数据");
                        }
                        // 当我们的数据传递完成
                        observer.onCompleted();
                    }
                });
    }

    public void click(View v) {
        // 观察者订阅
        // 回调原理:
        // 核心代码:
        // hook.onSubscribeStart(observable,
        // observable.onSubscribe).call(subscriber);
        observableString.subscribe(new Observer<String>() {
            @Override
            public void onCompleted() {
                Log.i("main", "---onCompleted---");
            }

            @Override
            public void onError(Throwable e) {
                System.out.println("Oh,no! Something wrong happened!");
            }

            @Override
            public void onNext(String item) {
                // 接受数据
                Log.i("main", "观察者接收到了数据: " + item);
            }
        });
    }

}

这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值