首页 > 其他分享 >RXAndroid学习笔记只粗略介绍方便翻开api知道啥时候用啥 而不是一篇一篇刷并记住再记住....

RXAndroid学习笔记只粗略介绍方便翻开api知道啥时候用啥 而不是一篇一篇刷并记住再记住....

时间:2022-11-24 14:43:48浏览次数:74  
标签:Observable 一篇 api 线程 new aLong 下游 记住 observeOn


前言

rx教程一抓一大把,很容易陷入其中无法自拔,甚至看完所有之后还是不知道到底应该怎么用,本篇文章只是举例一些api,一次为上游,上游变换或过滤等 下游 三个分支进行划分 列出操作符或者回调方法
先学会套路然后由浅入深,先学以致用然后慢慢深入才是最能实现学习并快乐着。

基本创建套路

普通

Observable.create()

让两个上游按前后先后顺序通知给下游​​Observable.concat(Observable.just(1,2,3), Observable.just(4,5,6))​

延迟开启

​Flowable.interval(1, TimeUnit.SECONDS)​

定时任务

Observable.timer(2, TimeUnit.SECONDS)

只接受一个

Single.just(new Random().nextInt())
//下游的监听用
.subscribe(new SingleObserver<Integer>() {

defer
每次订阅创建新的,没订阅不创建新的​​​Observable.defer(new Callable<ObservableSource<Integer>>() {​​​ 便捷方式​​Observable.just(1, 1, 1, 2, 2, 3)​

合并​​Observable.merge​​ 感觉和另外一个差不多

跟随的操作符或回调

​doOnNext​​ 只有参数不处理返回值 ,表示即将调用onNext之前的通知

​map​​​ 变换 也就是对象的转换 一对一的转换​​flatMap​​​一对多多对多 不保证顺序 还可以用​​new Function<xObservableSource>​​​​参考演示​​

​concatmap(function)​​保证顺序 和flatmap的唯一区别

​zip(function)​​​ 合并,如两个上游交换发布给下游。​​debounce​​ 去掉发射频率过快的

​distinct()​​去重,上游发射了重复的到下游之后就没有重复了

​filter(function)​​ 过滤 回调有返回值 返回true表示不过滤

​reduce(function<t1,t2,53>()​​ 多个接受? 上游juet3个,那么这里参数也是3个, 多合一的逻辑下游只受到一个处理结果.

​scan((arg1,arg2)->return arg1+arg2 )​

执行开始第一次直接不回调scan参数而是直接告诉下游,而第二次进行回调参数1则是前一次结果,参数2当前index的值
那么 scan为(arg1+arg2) ​​​Observable.just(1, 5, 9,12,15)​​ 输出为

1  
(index->1:1+5)6
(index:2:6+9)15

以此类推。

​skip(count)​​代表刚开始跳过几个 ,假设count=2也就是12345那么下游接受的时候只能收到从3开始的了。

​take(count)​​代表下游只能接受多3个,假设上游发布了3个,而设定的只有2个,那么下游只能接受2个了。

​buffer(count,skip)​​​ 控制流量,下游用​​(new Consumer<List<T>>​​方可体现,比如有10个数从1开始到10结束, count=3,skip=2那么list第一次有3个, 是123,第二次 ​​345 567 789 10​​ 如​​map(new Function<原始参数,变换结果>->变换结果返回 )​

​last(t)​​ t表示上游的类型值,满足这个值才告诉下游,否则不会受到。

​.window(3, TimeUnit.SECONDS)​​ 较为复杂,划分窗口,下游又进行订阅的情况使用 。

​subscribeOn(function)​​ 被观察者上游的执行线程设置 一般在安卓汇总设置为后台进程

​observeOn(function)​​ 观察者 下游的执行线程设置,或者叫回调的监听

上游的操作

上游的subscrire(e)中的常用操作

e.onNext(1);//传递结果给下游
e.onError()//传递错误给下游
e.onComplete();//传递完成给下游

指定线程的语法糖

用于​​subscribeOn​​​和​​observeOn​​中。

​Schedulers.io()​​ 代表io操作的线程, 通常用于网络,读写文件等io密集型的操作;

​Schedulers.computation()​​代表CPU计算密集型的操作, 例如需要大量计算的操作;

​Schedulers.newThread()​​ 代表一个常规的新线程;

​AndroidSchedulers.mainThread()​​代表Android的主线程

使用场景

使用场景1

1)通过 Observable.create() 方法,调用 OkHttp 网络请求;
2)通过 map 操作符集合 gson,将 Response 转换为 bean 类;
3)通过 doOnNext() 方法,解析 bean 中的数据,并进行数据库存储等操作;
4)调度线程,在子线程中进行耗时操作任务,在主线程中更新 UI ;
5)通过 subscribe(),根据请求成功或者失败来更新 UI 。

参考 ​​https://www.jianshu.com/p/81fac37430dd​

activity结束

if (mDisposable != null){
mDisposable.dispose();
}

在安卓主线程每隔几秒执行一个方法,而且每个方法都是在主线程执行。

Observable.just(0L)
.observeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doOnNext(new Consumer<Long>() {

@Override
public void accept(Long aLong) throws Exception {
Log.w(TAG, "1111:" + aLong + "," + "," + Thread.currentThread().getName());
}

}).delay(3, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
.doOnNext(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
Log.w(TAG, "2222-" + aLong + "," + Thread.currentThread().getName());
}
})
.delay(3, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
.doOnNext(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
Log.w(TAG, "3333-" + aLong + "," + Thread.currentThread().getName());

}
})
.delay(3, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
Log.w(TAG, "44444----" + aLong + "," + Thread.currentThread().getName());
}
});

未完待续

标签:Observable,一篇,api,线程,new,aLong,下游,记住,observeOn
From: https://blog.51cto.com/u_15458814/5883882

相关文章

  • 玩转java bytecode第一篇从java到asm的转换。
    java源码publicclassSimpleMain{publicstaticvoidmain(String[]args){System.out.println("333:");}}javap反汇编​​javap-p-c-s-lTestAsmTra......
  • [ios应用开发第一篇] 上手运行第一个简单程序
    新建simpleapp,可以拖拽控件到main.storyboard中拖拽一个按钮,到视图,然后打开ViewControl.h加上​​​-(IBAction)btnClick;​​打开对应的.h插入#pragmamark-分......
  • [第一篇]object c 和xcode开发工具撸代码初探吐槽
    开发工具吐槽开发工具似乎没有主动补全的快捷键.比如输入​​NSL​​手动把提示关闭了,没法再让它弹出勒(发现时按esc得,不知道能不能改...)开发工具似乎自动提示选中一个......
  • 使用API
    1、处理API响应importrequestsurl='https://api.github.com/search/repositories?q=language:python&sort=stars%27'r=requests.get(url)print('Statuscode:',r.......
  • fastapi框架
    1/kaxiluo/fastapi-frame/2|--app3||--commands-----放置一些命令行4||`--__init__.py5||--exceptions......
  • 拼多多详情API详细使用教程
    API是应用程序的开发接口,在开发程序的时候,我们有些功能可能不需要从到到位去研发,我们可以拿现有的开发出来的功能模块来使用,而这个功能模块,就叫做库(libary)。比如说:要实现......
  • 淘宝、天猫、1688、京东等25个平台的API数据接口
    接口大全;item_get获得淘宝商品详情item_get_app获得淘宝app商品详情原数据item_get_pro获得淘宝商品详情高级版item_review获得淘宝商品评论item_sku获取sku详细信......
  • fastapi异常处理
    DEMOitems={"test":"这是测试"}@app.get("/item/{item_id}")defread_item(item_id:str):ifitem_idnotinitems:raiseHTTPException(status_code=40......
  • fastapi学习
    Get请求fromfastapiimportFastAPIapp=FastAPI()@app.get("/items/{item_id}")asyncdefread_root(item_id:int):return{"item_id":item_id}#在最......
  • fastapi学习之路
    一、python3写一个http接口服务,给别人调用3这次选择fastapi,FastAPI是一个现代的、快速(高性能)的web框架,用于基于标准Python类型提示使用Python3.6+构建api。具有快速......