美文网首页
Rxjava 认识1

Rxjava 认识1

作者: dev晴天 | 来源:发表于2018-08-13 17:44 被阅读0次

/*
* 1 概念: Rxjava 基于观察者的 异步 事件库
* 2 rx的观察者模式 Observer/Subscripter 观察者,
* Observable 被观察者
* subscribe 订阅 (被观察者订阅 观察者 通过调用此函数)
*
* 3 对象的创建 :
*
* 创建观察者 new 接口Observer 或者Subscripter 两者有差异(新增了几个方法)
* // 接口中必须实现的三个方法
* onnext 普通事件 相当于 onClick(按钮接口回调事件中案例)
* onCom。。。 onnenxt不仅是一个事件 还是个事件队列 ,队列完成后 触发此方法
* onErr。。。 事件处理异常时触发 (成功失败只能触发一个)
*
* 注意 观察者的范型要与被观察者创建时参数类型一致
* */

package com.example.zhangbiao.rxjava;

import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.ImageView;

import java.io.File;

import rx.Observable;
import rx.Observer;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
import rx.functions.Func1;
import rx.schedulers.Schedulers;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "1234";

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

        /*
         * 1  概念: Rxjava  基于观察者的    异步 事件库
         * 2  rx的观察者模式 Observer/Subscripter 观察者,
         * Observable 被观察者
         * subscribe  订阅  (被观察者订阅 观察者  通过调用此函数)
         *
         * 3 对象的创建 :
         *
         * 创建观察者 new 接口Observer  或者Subscripter  两者有差异(新增了几个方法)
         * // 接口中必须实现的三个方法
         * onnext 普通事件 相当于 onClick(按钮接口回调事件中案例)
         * onCom。。。   onnenxt不仅是一个事件 还是个事件队列 ,队列完成后 触发此方法
         * onErr。。。   事件处理异常时触发 (成功失败只能触发一个)
         *
         * 注意 观察者的范型要与被观察者创建时参数类型一致
         *
         * 观察者:他什么时候触发事件 触发什么样的事件由 他的静态方法 create()创建
         * 看其参数 new Observable.OnSubscribe<String>()  OnSubscribe表示在订阅时 也就是下文的
         *  observable.subscribe(subscriber); 时
         *
         * */


        Subscriber<String> subscriber = new Subscriber<String>() {
            @Override
            public void onStart() {
                Log.i(TAG, "onStart: " + "初始化工作");
            }

            @Override
            public void onCompleted() {
                Log.i(TAG, "onCompleted: " + "事件完成!");
            }

            @Override
            public void onError(Throwable throwable) {
                Log.i(TAG, "onError: " + "事件异常");
            }

            @Override
            public void onNext(String s) {
                Log.i(TAG, "onNext: 接收到动作" + s);
            }
        };


        // oncreate是rxjava 最基本创建事件队列的方法  rxjava还提供了快捷创建的方法
        // 1 Observable observable1 = Observable.just("hello","world"); // 将传入的可变参数依次发出来
        // 2 Observable.from(new String[]{"hello","world"}); // 内部将传入的数组或者Iterable 转化为对象输出
        //1 2 的方式与3结果相同
        // 将会依次调用:
        // onNext("Hello");
        // onNext("world");
        // onCompleted();

        // 3 基本方式
        Observable observable = Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                // 被观察者内部有观察者的 对象subscriber  可以调用观察者的方法
                // 思路类比 点击事件


                // 被观察者发出动作   观察者便可以接收到
                // 基于事件的调度 类比点击事件 执行一次 观察者内部方法触发一次
                subscriber.onNext("hello");
                subscriber.onNext("world");
            }

        });

        // 被观察者订阅观察者事件(此句话可能有点不易理解 你会感觉反过来说通顺)
        observable.subscribe(subscriber);


    }
}


log:

08-13 17:41:23.465 5781-5781/com.example.zhangbiao.rxjava I/1234: 
    onStart: 初始化工作
    onNext: 接收到动作hello
    onNext: 接收到动作world

总结: // 被观察者执行步骤 观察者观察接收结果

相关文章

网友评论

      本文标题:Rxjava 认识1

      本文链接:https://www.haomeiwen.com/subject/npwubftx.html