RxJava学习笔记(一)

5G核心网Framed Routing功能解析:基于PFCP的帧路由机制与多终端互联实践 阅读详情

该笔记通过“RxJava 详解”学习记录


学习RxJava之前需要了解“观察者模式”


RxJava四个基本概念

1、Observable — 被观察者
2、Observer — 观察者
3、Subscribe — 订阅
4、事件

RxJava有两种事件:

1、普通事件 onNext()
2、特殊事件 onCompleted() — 时间队列完结。当不会再有新的onNext()发出时,需出发onCompleted()方法作为标志。
onError() — 事件队列异常。当事件处理过程中出现异常时,onError会被触发,同时队列自动终止。
注:一个正确的事件队列中,onCompleted()和onError()有且只有一个,并且是事件序列中的最后一个。onCompleted()与onError()二者互斥,即在队列中调用了其中一个,就不应该在调用另一个。

创建Observer,即观察者

它决定事件触发时将有怎样的行为。

Observer<String> observer = new Observer<String>(){
    @Override
    public void onNext(String s){ Log.d(tag,s); }
    @Override
    public void onCompleted(){ Log.d(tag,"Completed!"); }
    @Override
    public void onError(Throwable e){ Log.d(tag,s); }
}

或可以

创建Subscriber,即订阅者

它是Observer的抽象类,对Observer接口进行了拓展。

Subscriber<String> subscriber = new Subscriber<String>(){
    @Override
    public void onNext(String s){ Log.d(tag,s); }
    @Override
    public void onCompleted(){ Log.d(tag,"Completed!"); }
    @Override
    public void onError(Throwable e){ Log.d(tag,s); }
}

Observer与Subscriber之间的区别:

1.onStart():这是Subscriber增加的方法。它会在subscribe(订阅)刚开始,而事件还未发送之前被调用,可以用于做一些准备工作,例如数据的清零或重置。这是一个可选方法,默认情况下它的实现为空。需要注意的是,如果对准备工作的线程有要求(例如弹出一 个显示进度的对话框,这必须在主线程执行),onStart()就不适用了,因为它总是在subscribe(订阅)所发生的线程被调用,而不能指定线程。要在指定的线程来做准备工作,可以使用 doOnSubscribe() 方法。
2.unsubscribe():这是Subscriber所实现的另一个接口Subscription的方法,用于取消订阅。在这个方法被调用后,Subscriber将不再接收事件。一般在这个方法调用前,可以使用isUnsubscribed()先判断一下状态。unsubscribe()这个方法很重要,因为在subscribe()之后,Observable会持有Subscriber的引用,这个引用如果不能及时被释放,将有内存泄露的风险。所以最好保持一个原则:要在不再使用的时候尽快在合适的地方(例如onPause() onStop() 等方法中)调用 unsubscribe() 来解除引用关系,以避免内存泄露的发生。

创建Observable,即被观察者

它决定什么时候触发时间以及吃法怎样的时间。

1.使用create()方法创建

Observable observable = Observable.create(new Observable.OnSubscribe<String>() {
    @Override
    public void call(Subscriber<? super String> subscriber) {
        subscriber.onNext("Hello");
        subscriber.onNext("Hi");
        subscriber.onNext("Aloha");
        subscriber.onCompleted();
    }
});

对create()方法的详解:这里传入一个OnSubscribe对象作为参数。OnSubscribe会被存储在返回的Observale对象中,他的作用相当于一个计划表,当Observable被订阅时,OnSubscribe的call()方法会自动被调用,事件序列就会依照设定依次触发。

2.使用just(T…)方法创建。将传入的参数依次发送出来。

Observable observable = Observable.just("Hello", "Hi", "Aloha");

3.使用from(T[])/from(Iterable

String[] words = {"Hello", "Hi", "Aloha"};
Observable observable = Observable.from(words);

Subscribe(订阅)

observable.subscribe(observer);
// 或者:
observable.subscribe(subscriber);

为什么不能颠倒顺序,即为什么不能observer.subscribe(obserable):
Observable.subscribe(Subscriber)内部核心代码

public Subscription subscribe(Subscriber subscriber) {
    subscriber.onStart();
    onSubscribe.call(subscriber);
    return subscriber;
}

可以看到,subscribe()做了3件事:
1.调用Subscriber.onStart()方法。
2.调用Observable中的Onsubscribe.call(Subscriber)。在这里,事件发送的逻辑开始运行。从这也可以看出,在 RxJava 中,Observable 并不是在创建的时候就立即开始发送事件,而是在它被订阅的时候,即当 subscribe() 方法执行的时候。
3.将传入的Subscriber作为Subscription返回,方便unsubscribe()。

subscribe()不完整定义的回调

Action1<String> onNextAction = new Action1<String>() {
    // onNext()
    @Override
    public void call(String s) {
        Log.d(tag, s);
    }
};
Action1<Throwable> onErrorAction = new Action1<Throwable>() {
    // onError()
    @Override
    public void call(Throwable throwable) {
        // Error handling
    }
};
Action0 onCompletedAction = new Action0() {
    // onCompleted()
    @Override
    public void call() {
        Log.d(tag, "completed");
    }
};
// 自动创建 Subscriber ,并使用 onNextAction 来定义 onNext()
observable.subscribe(onNextAction);
// 自动创建 Subscriber ,并使用 onNextAction 和 onErrorAction 来定义 onNext() 和 onError()
observable.subscribe(onNextAction, onErrorAction);
// 自动创建 Subscriber ,并使用 onNextAction、 onErrorAction 和 onCompletedAction 来定义 onNext()、 onError() 和 onCompleted()
observable.subscribe(onNextAction, onErrorAction, onCompletedAction);

举例:

// 将字符串数组 names 中的所有字符串依次打印出来:
String[] names = ...;
Observable.from(names)
    .subscribe(new Action1<String>() {
        @Override
        public void call(String name) {
            Log.d(tag, name);
        }
    });

//由指定的一个 drawable 文件 id drawableRes 取得图片,并显示在 ImageView 中,并在出现异常的时候打印 Toast 报错
int drawableRes = ...;
ImageView imageView = ...;
Observable.create(new OnSubscribe<Drawable>() {
    @Override
    public void call(Subscriber<? super Drawable> subscriber) {
        Drawable drawable = getTheme().getDrawable(drawableRes));
        subscriber.onNext(drawable);
        subscriber.onCompleted();
    }
}).subscribe(new Observer<Drawable>() {
    @Override
    public void onNext(Drawable drawable) {
        imageView.setImageDrawable(drawable);
    }
    @Override
    public void onCompleted() {
    }
    @Override
    public void onError(Throwable e) {
        Toast.makeText(activity, "Error!", Toast.LENGTH_SHORT).show();
    }
})

线程控制 — Scheduler (调度器)

  1. Schedulers.immediate():在当前线程运行。默认方法。
  2. Schedulers.newThread():启用新线程,并在新线程执行操作。
  3. Schedulers.io():I/O(读写文件、读写数据库、网络交互)操作所用。和newThread()差不多,区别在于io()的内部实现使用一个无数量上限的线程池,可以重用空闲的线程,因此多数情况下io()比newThread()更有效率。不要把计算工作放在io()中,可以避免创建不必要的线程。
  4. Schedulers.computation():计算所使用的Scheduler。该计算指CPU密集型计算,即不会被I/O等操作限制性能操作,例如图形计算。该方法使用固定线程池,大小为CPU核数。不要把I/O操作放到该方法中,否则I/O操作的等待时间会浪费CPU。
  5. AndroidSchedulers.mainThread():Android专有方法,指定操作在Android主线程运行。

以上方法可以使用subscribeOn()和observeOn()两个方法来控制。

  1. subscribeOn():指定subscribe所发生的线程,即Observable.OnSubscibe被激活时所处的线程。可叫作事件产生的线程。
  2. observeOn():指定Subscriber所运行的线程。可叫作事件消费的线程。
    举例:
int drawableRes = ...;
ImageView imageView = ...;
Observable.create(new OnSubscribe<Drawable>() {
    @Override
    public void call(Subscriber<? super Drawable> subscriber) {
        Drawable drawable = getTheme().getDrawable(drawableRes));
        subscriber.onNext(drawable);
        subscriber.onCompleted();
    }
})
.subscribeOn(Schedulers.io()) // 指定 subscribe() 发生在 IO 线程
.observeOn(AndroidSchedulers.mainThread()) // 指定 Subscriber 的回调发生在主线程
.subscribe(new Observer<Drawable>() {
    @Override
    public void onNext(Drawable drawable) {
        imageView.setImageDrawable(drawable);
    }
    @Override
    public void onCompleted() {
    }
    @Override
    public void onError(Throwable e) {
        Toast.makeText(activity, "Error!", Toast.LENGTH_SHORT).show();
    }
});

注:
1.通过observeOn()可以实现多次切换线程。若想要多次切换线程,只需要在要切换线程的位置调用一次observeOn()即可。例如:

Observable.just(1, 2, 3, 4) // IO 线程,由 subscribeOn() 指定
    .subscribeOn(Schedulers.io())
    .observeOn(Schedulers.newThread())
    .map(mapOperator) // 新线程,由 observeOn() 指定
    .observeOn(Schedulers.io())
    .map(mapOperator2) // IO 线程,由 observeOn() 指定
    .observeOn(AndroidSchedulers.mainThread)
    .subscribe(subscriber);  // Android 主线程,由 observeOn() 指定

2.subscribeOn()的位置可以随便放,但它只能调用一次。

延伸:doOnSubscribe()

Subscriber 的 onStart() 可以用作流程开始前的初始化。然而 onStart() 由于在 subscribe() 发生时就被调用了,因此不能指定线程,而是只能执行在 subscribe() 被调用时的线程。这就导致如果 onStart() 中含有对线程有要求的代码(例如在界面上显示一个 ProgressBar,这必须在主线程执行),将会有线程非法的风险,因为有时你无法预测 subscribe() 将会在什么线程执行。
而与 Subscriber.onStart() 相对应的,有一个方法 Observable.doOnSubscribe() 。它和 Subscriber.onStart() 同样是在 subscribe() 调用后而且在事件发送前执行,但区别在于它可以指定线程。默认情况下, doOnSubscribe() 执行在 subscribe() 发生的线程;而如果在 doOnSubscribe() 之后有 subscribeOn() 的话,它将执行在离它最近的 subscribeOn() 所指定的线程。

Observable.create(onSubscribe)
    .subscribeOn(Schedulers.io())
    .doOnSubscribe(new Action0() {
        @Override
        public void call() {
            progressBar.setVisibility(View.VISIBLE); // 需要在主线程执行
        }
    })
    .subscribeOn(AndroidSchedulers.mainThread()) // 指定主线程
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(subscriber);

变换

1.事件对象变换 map(),例如:

Observable.just("images/logo.png") // 输入类型 String
    .map(new Func1<String, Bitmap>() {    //将String类型转换为Bitmap类型
        @Override
        public Bitmap call(String filePath) { // 参数类型 String
            return getBitmapFromPath(filePath); // 返回类型 Bitmap
        }
    })
    .subscribe(new Action1<Bitmap>() {
        @Override
        public void call(Bitmap bitmap) { // 参数类型 Bitmap
            showBitmap(bitmap);
        }
    });

2.事件队列变换 flatMap(),例如:

/**
 * 需求:有一个数据结构【学生】,需要打印每个学生所需要学习的所有课程的名称
*/
Student[] students = ...;
Subscriber<Course> subscriber = new Subscriber<Course>() {
    @Override
    public void onNext(Course course) {
        Log.d(tag, course.getName());
    }
    ...
};
Observable.from(students)
    .flatMap(new Func1<Student, Observable<Course>>() {
        @Override
        public Observable<Course> call(Student student) {
            return Observable.from(student.getCourses());
        }
    })
    .subscribe(subscriber);

3.针对Observable自身变换 compose(Transformer),例如:

/**
 * 需求:假设程序中有多个 Observable,并且都需要应用一组相同的 lift() 变换
*/
public class LiftAllTransformer implements Observable.Transformer<Integer, String> {
    @Override
    public Observable<String> call(Observable<Integer> observable) {
        return observable
            .lift1()
            .lift2()
            .lift3()
            .lift4();
    }
}
...
Transformer liftAll = new LiftAllTransformer();
observable1.compose(liftAll).subscribe(subscriber1);
observable2.compose(liftAll).subscribe(subscriber2);
observable3.compose(liftAll).subscribe(subscriber3);
observable4.compose(liftAll).subscribe(subscriber4);

另附几篇博客参考:
RxJava源码初探:http://www.apkbus.com/blog-705730-60688.html
RxJava全面总结:http://www.apkbus.com/blog-705730-60454.html
玩透RxJava基础知识:http://www.apkbus.com/blog-705730-60437.html

Python爬虫实战:基于Playwright与异步技术的专利数据抓取系统 专利数据是企业技术创新、市场竞争分析和行业趋势预测的关键情报来源。然而,专利数据通常分散在各个国家的专利局网站,数据结构复杂,反爬机制严格,使得高效抓取成为技术挑战。本文将详细介绍如何构建一个基于最新Python技术的专利数据抓取系统,涵盖Selenium的现代化替代方案Playwright、异步编程、智能代理轮换等高级技术。 阅读详情

相关推荐

【阿里云大模型高级工程师ACP习题集】2.4 自动化评测答疑机器人的表现(⭐️⭐️⭐️ 重点章节!!!)

【摘要】这是我精心整理出对应的习题集,里面足足有 30 道题目,从基础概念到深度拓展,全方位覆盖章节重点、难点。不管你是想检验自己的学习成果,还是想针对薄弱环节进行强化训练,它都能完美适配!

davidkorhenn的博客 2477

记使用RxJava保存byte[]到文件,遇到的内存泄漏问题

前言 最近写一个页面内会多次拍照并保存的需求.连拍多次发现内存泄漏. 找原因花了不少时间.记录下来. 问题: 将byte[]保存为文件.明明已经关闭了流. 然而一顿连拍后,内存监控却大吃一惊. 点小黄车gc也不好使.... 内存分析: 查看内存报告.很明显,byte[]数组泄漏了. 找到内存占用很大的byte[] 什么? 很明显,Rxjava引用了这个数组,并且这个observer...

weixin_34309435的博客 403

ERPS协议原理

目录 1、ERPS概述: 2、ERPS名词概念解释: 3、ERPS协议报文: 4、ERPS单环基本原理: 5、单环多实例原理: 6、多环原理: 1、ERPS概述: ERPS(Ethernet Ring Protection Switching),即以太网多环保护技术,是ITU-T定义的一种二层破环协议标准,标准号为ITU-T G.8032/Y1344,因此又称为G.8032。它定义了RAPS(Ring Auto Protection Switching)协议报文和保护倒换机制。 ERPS目前支持v1和v2两

weixin_44880796的博客 1万+

RxJava的使用(线程调度器)---包括从网络下载图片进行显示

public class Main2Activity extends AppCompatActivity { private ImageView img; private DownLoadUtils mDownloadUtils; String path="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_

yukaihuaboke的博客 495

ACL访问控制列表详解:原理、配置与应用

如果发现ACL规则没有达到预期效果,需要检查ACL规则配置是否正确,是否在正确的接口和方向上应用,以及规则顺序是否合理(ACL规则按顺序匹配,匹配到即停止)。其中,rule-id是规则的编号,用于确定规则的匹配顺序;例如,应该先配置针对特定主机和特定端口的规则,再配置针对整个网段的规则,最后配置允许所有流量的规则,这样才能确保ACL按照预期工作,避免因规则顺序不当导致的访问控制失效。例如,应该先配置针对特定主机的规则,再配置针对整个网段的规则,最后配置允许所有流量的规则,这样才能确保ACL按照预期工作。

彭大帅的博客 1045

从LLM到VLM再到VLA:三兄弟的“变形记”——定义、架构演进与最新趋同

LLM、VLM、VLA虽然在时间上依次出现,但它们在架构上的演进并非线性替代,而是形成了一个从“理解语言”到“理解世界”再到“改变世界”的认知闭环。VLA之所以能在短短三年内从概念走向现实,正是因为它站在了LLM和VLM的肩膀上——RT-2的泛化能力来自互联网规模的VLM预训练,π0的扩散策略受益于生成式模型的突破,Helix的双系统架构借鉴了“快慢思考”的认知科学洞见。而反过来,VLA在实际部署中遇到的效率瓶颈和实时性要求,也在倒逼LLM和VLM向更轻量、更高效的架构方向演进。

Ven%的博客 489

[译]震惊!RxJava 5 个不为人知的小秘密

原文地址:5 Not So Obvious Things About RxJava 原文作者:Jag Saund 译文出自:掘金翻译计划 译者: skyar2009 校对者:Danny1451, yunshuipiao 震惊!RxJava 5 个不为人知的小秘密 无论你是刚刚接触 RxJava,还是已经使用过一段时间,关于 RxJava 你总会有些新的知识要学。在使用 RxJava 框架...

weixin_34257076的博客 271

从零开始学习PX4源码23(飞行模式管理)

本文摘要主要介绍了PX4飞控系统中飞行模式管理模块的代码实现流程。文章从整体架构入手,分析了飞行模式管理模块的启动过程、类继承关系以及核心运行机制。重点阐述了模块从rc.mc_apps启动脚本到FlightModeManager::main()的调用链路,包括任务创建、工作队列初始化和主循环执行流程。核心部分解释了Run()函数如何通过订阅传感器数据、更新参数、处理命令以及生成轨迹设定点来实现飞行模式切换和任务管理功能。文章为理解PX4飞行控制系统的模式切换机制提供了代码层面的详细分析。

陌城烟雨 498

java释放byte_记使用RxJava保存byte[]到文件,遇到的内存泄漏问题

前言最近写一个页面内会多次拍照并保存的需求.连拍多次发现内存泄漏.找原因花了不少时间.记录下来.问题:Paste_Image.pngPaste_Image.png将byte[]保存为文件.明明已经关闭了流.然而一顿连拍后,内存监控却大吃一惊.Paste_Image.png点小黄车gc也不好使....Paste_Image.png内存分析:Paste_Image.png查看内存报告.很明显,byte...

weixin_33514864的博客 603

三菱FX系列PLC模拟量输入AD模块的使用方法和相关编程设置详解

三菱FX系列PLC模拟量输入AD模块的使用方法和相关编程设置详解

Robot_PLC_HMI_Automation 1万+

SAR成像专栏目录

为方便大家阅读,我做了一个专栏目录,蓝色字有超链接,可以直接打开。 本专栏默认读者已具备雷达系统的基本知识或者已阅读过雷达导论专栏中的文章。 1. 概述 SAR成像概述 星载SAR的各项指标解读(史上最全) SAR成像算法的实现途径与算力分析 2. SAR成像原理与SAR系统简介 雷达与分辨率 SAR成像原理与方法 SAR图像的形成和处理 SAR系统设计 3. 点目标仿真 点目标仿真(一)—— 数学模型 点目标仿真(二)—— Matlab仿真 4. 成像算法 更新中 雷达导论专

7453

RxJavaAndroid学习笔记

当子线程处理某个逻辑要在主线程显示的时候使用。 Observable.just(currentBytesCount).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<Long>() { @Override ...

情随事迁个人博客 206

14、多标签分类与卷积神经网络在医学图像处理中的应用

本文探讨了多标签分类与卷积神经网络(CNN)在医学图像处理中的应用。文章详细介绍了多标签分类的概念和挑战,以及如何通过CNN进行高效、准确的分类任务。内容涵盖模型设计、损失函数选择、数据增强技术、类别权重调整等关键技术点,并结合实际案例,如白内障手术工具检测、视网膜血管分割等,展示了CNN在医学图像分析中的强大潜力。此外,还讨论了模型优化策略及面临的挑战与解决方案。

t8u9v0的博客 191

RxJava 学习笔记一

RxJava 学习笔记一原文链接:深入浅出RxJava(一:基础篇) 创建一个Observable对象,直接调用Observable.createObservable<String> myObservable = Observable.create( new Observable.OnSubscribe<String>() { @Override public vo

lwjlol的博客 379

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

RxJava 学习笔记(一)

最近Android6.0的权限问题,要把之前的APP进行改造,用到了RxPermission框架!之前了解过RXJAVA,但是由于之前项目一直没有使用这个框架,所以也就一直搁置了。正好Rxpermission框架里用到了RXJAVA的内容,索性就学习了一下。 在正文开始之前的最后,放上GitHub链接和引入依赖的gradle代码: Github:https://github....

akxdpr0451的博客 220

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Java中expecial,RxJava 学习笔记 (一)

作者: 一字马胡转载标志 【2017-12-13】更新日志日期更新内容备注2017-12-13RxJava学习笔记系列系列笔记 (一)2017-12-15增加系列笔记(二)2017-12-15 21:36考虑到RxJava很大程度上用于android开发中,而我自身不是移动开发者,所以暂时将RxJava学习笔记系列挂起,在未来需要使用RxJava的时候再继续学习,并且结合实际的应用来学习会收获更多...

weixin_39633452的博客 462

Rxjava学习笔记(一)

Rxjava学习基本用法 Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() { @Override public void subscribe(ObservableEmitter<Integer> e)

AINewBegin的专栏 434

RxJava学习笔记(一)概念

RxJava 学习笔记(一)概念Rxjava 从去年开始就有耳闻,在各大开源项目中也可以看到有使用他的,各大牛也说他好用,既然大家都说好,具体好不好我们自己学着用一下就知道了,刚好这段时间项目闲下来就来学习一下RxJava。1 是什么同样,在用一个东西之前,要先知道他是什么东西。“RxJava is a Java VM implementation of Reactive Extensions: a

moxiouhao的专栏 681

Rxjava学习笔记(一)

RxJava 2.0

prefer_tyl 859

RxJAVA学习笔记(一)

RxJAVA使用的是响应式编程方式:响应式编程是一种建立在异步数据流概念上的编程思想。一个数据流可以被过滤,操作,和另外一条数据流合并形成一条新的数据流。响应式编程主要的是事件,事件可以被等待,可以触发过程,还可以触发另外一些事件,RxJAVA与纯粹JAVA有什么不同RxJAVA是从经典的GOF观察者模式继承而来的。同时RxJAVA添加了以下经典观察者模式没有的能力: 生产者能通过onComplet

bcbbcc的博客 660

Rxjava 2学习笔记(一)

Rxjava 2学习笔记(一)   Rxjava 在这些年在android开发中非常的火爆,它和Retrofit 的结合堪称完美,他们可以把我们从以前我们进行网络请求中各种线程切换,各种接口回掉中解放出来了。可以让我们的逻辑变的非常清晰,便于代码维护。我们公司的项目目前使用的Rxjava 版本还是1.0版本的,准备打算升级到使用Rx2.0。所以打算学习一下Rxjava 2 Observable.c...

huangjie的博客 399

RxJava :源码学习笔记(一)

先来个最简单的例子 Observable .create( // 此处称为起点,source new ObservableOnSubscribe<String>() { @Override public void subscribe(ObservableE

临木的博客 159

Rxjava2.0学习笔记(一)

吐槽 突然写完游戏,,不知道安卓自己要学什么,明明自己安卓方面还是什么都不会,但有点迷,就最近学下Rxjava,因为可能他在网络这块用处大,自己也要继续把自己的卡片项目写完,java的相关知识也要跟上学习。 什么是Rxjava RxJava 是一个 基于事件流、实现异步操作的库 由于 RxJava的使用方式是:基于事件流的链式调用,所以使得 RxJava 更重要的是,随着程序逻辑的复...

sakurakider的博客 262

项目实训(一)Rxjava 2.0 学习笔记

我感觉Rxjava像是一条流水线,一块原料到来经过层层加工最后交给订阅者,当然不处理直接交给订阅者也可以。 从基本设计(Rx1.0)来看,Observable有一个内部类实例OnSubscribe,当Observable调用subscribe时会调用这个OnSubscribe的call。这就是全部。一般来说会在call里调用Subscriber的方法将信息传递过去。由此基本逻辑,又延伸封装出各种...

Starybirds7的博客 407

rxjava学习笔记(一)订阅关系、线程操作、操作符

rxjava /** * 观察者 Observer * 被观察者 Observable * 订阅 subscribe * 发射 ObservableEmitter * 中断接收 Disposable */ rxjava //创建一个被观察者 Observable observable = Observable.create(new ObservableOn...

a358333644的博客 354
上一篇: 实现Android透明状态栏(或叫沉浸式状态栏)
下一篇: AIDL的实例讲解
青杉`
博客等级 码龄10年 148粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值