RxJava使用场景

作者: 小彤花园 | 来源:发表于2017-08-03 16:13 被阅读1547次

1.线程切换

subscribeOn()

observeOn()

subscribeOn()和observeOn()的区别:

  • subscribeOn()主要改变的是订阅的线程,即call()执行的线程;
  • observeOn()主要改变的是发送的线程,即onNext()执行的线程。

Scheduler进程调度

Schedulers.immediate():默认的,当前线程

Schedulers.newThread():新建的线程

Schedulers.io():采用了线程池,内部是一个不限制线程数量的线程池,用于io操作

Schedulers.comutation():线程池,线程池中的线程数量取决于CPU的核数,通常用于CPU密集操作,如:数据读写操作、解析,图形处理

2.flatmap 接口依赖

返回Observable,处理嵌套请求

我有时候用来做连续请求,比如首页多类型的请求

3.merge 接口合并

Observable<T> a=xxx;
Observable<T> b=xxx;
Observable.merge(a,b).subscribe(xxx);

接口结果类型相同的时候可以直接Observable<T>

接口结果类型不同的时候可以用?代替T

只有当这两个请求都完成后才能更新UI

4.concat 构建多级缓存

Observable.concat(getFromMemory(),getFromDisk(),getFromNet())
.takeFirst(new Func1<Bitmap,Boolean>(){...});//别忘了takeFirst

不要忘记用takeFirst(),concat按顺序将它们串联。

5.timer 定时器

Observable.timer(2,TimeUnit.SECONDS).subscribe();

6.interval 周期任务

Observable.interval(5,TimeUnit.SECONDS).subscribe();

7.filter 数据过滤

Observable.from(list).filter(new Func1<String,Boolean>){
    @Override
    public Boolean call(String s){
        return !TextUtils.isEmpty(s);
    }
}

8.throttleFirst 界面防抖动

防止多次点击,重复打开界面,类似于自己写的NoDoubleClickListener

RxView.clicks(btn).throttleFirst(1L,TimeUnit.SECONDS).subscribe();

9.just 老接口适配

将一些方法返回类型转为Observable

Observable.just(x,y).subscribe(new Action1<Integer>(){
    @Override
    public void call(Integer result){
        print(result);
    }
});

10.响应式界面

例如登录的时候,只有用户名和密码都不空的时候,登录按钮才可点击

Observable<String> username=RxTextView.textChanges(usernameEditText);
Observable<String> psd=RxTextView.textChanges(pswEditText);

Observable.combintLatest(username,psd,new Func2<String,String,Boolean>(){
    @Override
    public Boolean call(String username,String psd){
        return !TextUtils.isEmpty(username)&&!TextUtils.isEmpty(psd);
    }
}).subscribe(xxx);

11.map

处理数据,可以返回不同数据的Observable

12.connect 广播

同时发送消息进行操作

ConnectObservable<T> broadcastObservable=myFirstObservable.
    subscribeOn(Schedulers.computation())
    .map(xxx)
    .publish();//记住要publish

broadcastObservable.subscribeOn(Schedulers.io())
    .subscribe(xxx);

broadcastObservable.observeOn(AndroidSchedulers.mainThread())
    .subscribe(xxx);

broadcaseObservable.connect();//最后要connect(),只有在调用connect后才会发送数据

要注意的地方

主动取消订阅,防止内存泄漏。一般在BaseActivity或者BaseFragment中统一取消订阅,还可以用RxLifeCycle库来取消订阅,帮我们在组件声明周期的某个阶段自动取消订阅。

提供了bindToLifeCycle()和bindUntilEvent()来绑定生命周期和事件。

bindToLifeCycle:

activity需要继承RxAppCompatActivity

在onResume中绑定的话,会在对应的onPause里边取消绑定

onStart订阅->onStop中取消

onCreate订阅->onDestory取消

bindUntilEvent:

activity需要继承RxAppCompatActivity

在类似onclick事件中绑定,在onPause里边解除绑定

相关文章

  • RxJava使用场景

    RxJava使用场景

  • Android Rxjava3 使用场景

    一、Rxjava使用场景 为了模拟实际场景,从wanandroid网站[https://www.wanandroi...

  • RxJava使用场景

    1.线程切换 subscribeOn() observeOn() subscribeOn()和observeOn(...

  • RxJava使用场景

    一、Scheduler线程切换这种场景经常会在“后台线程取数据,主线程展示”的模式中看见 二、使用debounce...

  • RxJava使用场景

    本笔记摘自云在千锋RxJava系列教程.何时应该使用RxJava?Rx Java适合组合和消耗一系列的事件(数据)...

  • Rxjava使用场景

    前言 开始接触并且尝试的去应用Rxjava是从抛物线的这篇文章给 Android 开发者的 RxJava 详解开始...

  • Rxjava 使用场景

    Single:大多数场景都是单值发射,所以使用 Single 即可覆盖大部分场景。https://blog.csd...

  • [转载]RxJava使用场景

    原文链接 http://blog.csdn.net/theone10211024/article/details/...

  • RxJava使用场景总结

    1.包装缓慢的旧代码 2.线程切换 3.同步的数据变换 4.异步的数据变换 5.取数据的优先级 6.等待多个请求完...

  • RxJava使用场景整理

    Rxjava是什么(异步库、响应式编程) 基于自己的理解简单的下一个定义: RxJava是一个使用Java语言实现...

网友评论

本文标题:RxJava使用场景

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