IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Rxjava原理分析之使用与手写(一) -> 正文阅读

[移动开发]Rxjava原理分析之使用与手写(一)

随着Rxjava 在Android中的应用越来越广泛,面试中难免会被问到关于Rxjava的内容,本文就来手写一下Rxjava的简单实现,通过手写简单的Rxjava 再去了解Rxjava的实现原理会更加容易理解Rxjava 为什么这么实现。Rxjava虽然说是基于观察者模式写的,但在我看来更像是基于责任链模式;

在了解Rxjava之前首先要知道java中的泛型使用,泛型使用本文不讨论

一、 Rxjava的使用

项目 app 模块的集成,只使用原生Rxjava,RxAndroid 只是拓展了Rxjava的内容

implementation "io.reactivex.rxjava3:rxjava:3.1.4"

使用:

 public void testRx() {
        Obserable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(Observer<? super String> observer) {
                observer.onNext("lingtao");
            }
        }).subscrible(new Observer<String>() {
            @Override
            public void onNext(String bitmap) {
				Log.e("YulianActivity_LOG", "onNext: "+s);
            }
        });
    }

Rxjava的使用还是很简单的,上面只是给了Rxjava使用的简单例子,下面就参照它的api调用链来手写一个简单的Rxjava;

二、手写Rxjava

在手写之前大概了解一下各个类的作用,Obserable、ObservableOnSubscribe、Observer;我们把Obserable 当作是个老板,ObservableOnSubscribe 就相当于项目经理,Observer 就是个员工。

比如现在有个例子:老板现在想做一个项目,他又不知道具体做什么类型项目,所以他让项目经理来确定具体项目,现在项目经理确定了要做一个Android项目,并通知员工干活

Obserable:老板(被观察者),他比较懒,什么都不做,只会招员工

ObservableOnSubscribe:项目经理,由项目经理去通知员工干活,并把资料给员工;

Observer:员工(观察者),收到项目经理给的资料具体干活的对象;

首先需要一个被观察者类Obserable,里面有个create与subscrible 方法,这个Obserable肯定是个泛型类,这个泛型T具体类型由项目经理来确定

/**
  * 老板
  */
public class Obserable<T> {

    ObservableOnSubscribe onSubscribe;
    
    private Obserable(ObservableOnSubscribe onSubscribe) {
        this.onSubscribe = onSubscribe;
    }

    /**
     * 老板需要招一个项目经理,所以需要传入一个ObservableOnSubscribe,参照Rxjava调度链
     */
    public static <T> Obserable<T> create(ObservableOnSubscribe<T> onSubscribe) {
        return new Obserable<T>(onSubscribe);
    }
	
    /**
     * 老板不仅需要招项目经理也需要招员工来干活,项目经理有个这个员工才能让员工干活
     */
    public void subscrible(Observer<T> observer) {
        onSubscribe.subscribe(observer);
    }

}

Obserable 还是很简单的,Obserable需要持有一个ObservableOnSubscribe项目经理。通过create() 方法创建一个老板,create就一个作用,创建老板;subscrible() 方法就是通知手下干活了,这个通知谁做,当然是项目经理去通知了,所以里面调用了项目经理的subscribe() 方法;

/**
 * 项目经理
 */
public interface ObservableOnSubscribe<T>{

    // 通知员工的方法
    void subscribe(Observer<T> t);

}

ObservableOnSubscribe很简单,只有一个通知员工的方法,参数中的这个员工是老板给的,在方法里面项目经理把Android资料交给员工

/**
 * 员工
 */
public abstract class Observer<T> {
	
    //员工收到资料干活的方法
    public abstract void onNext(T t);

}

Observer类也很简单,只有一个onNext() 方法,员工收到项目经理给的资料就开始干活了;

到此,一个简单的Rxjava就完成了,当然真正的Rxjava里的Observer 还有其他方法,onError() ,onComplete(),这里就先不写入进来,这里只分析一个简单的Rxjava流程;下面来开始使用

//create 创建一个老板
Obserable.create(new ObservableOnSubscribe<String>() {
    @Override
    public void subscribe(Observer<String> t) {// 项目经理通知员工干活的方法
        //项目经理把Android资料给到员工
        t.onNext("Android资料");
    }
}).subscrible(new Observer<String>() {//老板招员工
    @Override
    public void onNext(String s) {//员工收到资料的方法
         Log.e("MainActivity_LOG", "onNext: 收到资料开始干活了:" + s);
    }
});

手写简单的Rxjava 到此结束,可以去试试打印能不能出来,下篇继续手写,加入一个map操作符

Rxjava原理分析之手写map操作符(二)

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-04-23 10:58:30  更:2022-04-23 10:59:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 23:27:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码