Android笔记
我的博客
Android笔记
Android笔记
  • Android学习资料
  • Android知识点梳理
  • Android Studio
  • aop
  • UI
    • ViewPager2
    • View
      • View.post()分析
      • 自定义View
        • Canvas使用
        • Paint使用
        • Path使用
        • PathMeasure使用
        • Matrix使用
      • View事件分发
    • TextView
    • EditText
    • 引导页
    • 菜单
    • Toolbar
    • RecyclerView
    • ViewPager
    • BottomSheet
    • 通知
    • CalendarView
    • TimePicker
    • LayoutInfalter
    • shadowlayout
    • 状态栏适配
    • RecyclerView
    • 屏幕适配
  • 组件
    • Activity
    • Intent
    • 服务
      • 服务
      • 绑定服务
      • AIDL
    • Broadcasts
    • Fragment
    • ContentProvider
  • 权限
  • 数据存储
    • 数据和文件存储
    • 将文件保存到外部存储中
    • 将文件保存在内部存储中
    • Android 存储用例和最佳做法
    • 保存键值对数据
  • 编译时注解
    • Untitled
    • Java注解处理器](annotation/annotation-processing.md)
    • JavaPoet 文档翻译
  • 图形和图像
    • Drawable使用
  • 网络
    • WebView
    • OkHttp文档翻译
      • OkHttp使用
      • OkHttp拦截器
    • Retrofit使用
    • Retrofit源码分析
    • HttpURLConnection使用
    • Volley使用
    • Volley源码分析
    • Glide使用
    • Glide源码分析
    • RxJava
  • 插件化
    • 插件化框架
    • VirtualAPK分析
  • 依赖注入
  • 开源库
    • EventBus源码分析
    • Okio概览
    • Okio菜谱
    • Okio
    • OkHttp拦截器
    • OKHttp缓存
    • Okhttp源码分析
  • 集合
    • SparseArray
    • ArrayMap
  • 架构
  • Jetpack
    • databinding adapter
    • databinding坑
    • databinding源码分析
    • Android Data Binding: Let’s Flip This Thing
    • Untitled
    • Lifecycle源码分析
    • ViewModel源码分析
    • LiveData源码分析
  • 音频和视频
    • CameraX使用
    • ExoPlayer
    • GsyVideoPlayer
  • 性能优化
    • 崩溃优化
    • 内存优化
      • LeakCanary如何工作
    • 渲染优化
    • 电池优化
    • 启动优化
    • 网络优化
    • 安装包大小优化
  • NDK开发
  • 系统源码分析
    • Android源码下载
    • Android系统启动
      • init进程启动过程
      • Zygote进程启动过程
      • Zygote进程启动流程
      • SystemServer处理过程
    • 应用程序进程启动过程
      • 应用程序进程启动过程介绍
    • Window
    • WMS
    • WindowManagerService
    • 四大组件的工作过程
      • Activity启动流程分析
      • Activity启动流程
    • ActivityManagerService分析
    • Context详解
    • Binder原理
      • Binder驱动
      • 获取ServiceManager
      • 启动ServiceManager
      • Parcel源码分析
    • Android图形系统概述
    • Choreographer原理
    • Handler使用
    • Handler源码分析
  • 逆向
    • Android抓包
    • 网易云音乐逆向
由 GitBook 提供支持
在本页
  • 目录
  • 1.创建Observable
  • 2.操作符
  • 3.错误处理
  • 4.调度器
  • 5.订阅
在GitHub上编辑
  1. 网络

RxJava

上一页Glide源码分析下一页插件化

最后更新于3年前

目录

RxJava最核心的东西就是Observables和Subscribers。Observables发出一系列事件,Subscribers处理这些事件。如果一个Observables没有任何的Subscribers,那么这个Observables是不会发出任何事件来。

1.创建Observable

RxJava提供了多种创建Observables的方法。create方法创建一实例需要传入一个OnSubscribe,当Subscriber订阅时进行调用。

创建Subscriber

Subscriber<String> mySubscriber = new Subscriber<String>() {
    @Override
    public void onCompleted() {

    }

    @Override
    public void onError(Throwable e) {
    }

    @Override
    public void onNext(String s) {
        System.out.println(s);
    }
};

创建Observable

        Observable<String> myObservable=Observable.create(
                new Observable.OnSubscribe<String>(){

                    @Override
                    public void call(Subscriber<? super String> subscriber) {
                        System.out.println(subscriber);
                //rx.observers.SafeSubscriber@3e4cefce
                subscriber.onNext("hello,world!");
                    }
                }
        );

调用Observable的subscriber方法与Subscrible进行关联

  // 通过Observable的subscribe方法完成subscriber对observable的订阅
      myObservable.subscribe(mySubscriber);

输出

hello,world!

Observable的just用来创建只发出一个事件就结束的Observable对象。

Observable的from方法,接受一个集合作为输入,然后每次输出一个元素给Subscriber。

     Observable.from(new Integer[]{1,2,3,4,5})
                .filter(new Func1<Integer, Boolean>() {
                    @Override
                    public Boolean call(Integer integer) {
                        return integer/2==0;
                    }
                }).subscribe(new Action1<Integer>() {
            @Override
            public void call(Integer integer) {
                System.out.println(integer);
            }
        });

2.操作符

操作符就是为了解决对Observable对象的变换问题,操作符用于在Observable和最终的Subscriber之间修改Observable发出的事件。RxJava提供了很多很有用的操作符。

map操作符,就是用来把一个事件转换为另一个事件的。

    Observable.just("hello,")
                .map(new Func1<String, String>() {
                    @Override
                    public String call(String s) {
                        return s + "Dan";
                    }
                }).subscribe(new Action1<String>() {
                    @Override
                    public void call(String s) {
                        System.out.println(s);
                    }
                });

也可以使用map操作符返回一个发出新的数据类型的Observable对象。

flatMap可以返回一个Observable对象。

 Observable.create(new Observable.OnSubscribe<Integer>() {
            @Override
            public void call(Subscriber<? super Integer> subscriber) {
                System.out.println("create--->"+subscriber);
                //rx.internal.operators.OperatorMap$1@c10d39
                subscriber.onNext(10);
            }
        }).flatMap(new Func1<Integer, Observable<Integer>>() {
            @Override
            public Observable<Integer> call(final Integer integer) {

                return Observable.create(new Observable.OnSubscribe<Integer>() {
                    @Override
                    public void call(Subscriber<? super Integer> subscriber) {
                        System.out.println("flatMap--->"+subscriber);
                        // rx.internal.operators.OperatorMerge$InnerSubscriber@2b3bc58a
                        subscriber.onNext(integer * integer);
                    }
                });
            }
        }).subscribe(mySubscriber2);
Subscriber<Integer> mySubscriber2 = new Subscriber<Integer>() {
  @Override
  public void onCompleted() {

  }

  @Override
  public void onError(Throwable e) {

  }

  @Override
  public void onNext(Integer integer) {
    System.out.println(integer);
  }
};

3.错误处理

4.调度器

RxJava可以使用Observable的subscribeOn方法指定观察者代码运行的线程。

5.订阅

当调用Observable.subscribe()会返回一个Subscription对象。这个对象代表了观察者和订阅者之间的联系。

//是否解除订阅
subscription.isUnsubscribed()
//解除订阅
subscription.unsubscribe();

参考

1.创建Observable
2.操作符
3.错误处理
4.调度器
5.订阅
参考
深入浅出RxJava(一:基础篇)
深入浅出RxJava(二:操作符)
深入浅出RxJava三--响应式的好处
深入浅出RxJava四-在Android中使用响应式编程
NotRxJava懒人专用指南
Introducing Yahnac: Where RxJava Meets Firebase and Content Providers