一个RxJava实用工具类的集合
2018-03-07 23:57
288 查看
RxUtil
一个实用的RxJava1工具类库
关于我
内容
RxBus 支持多事件定义,支持数据携带,支持全局和局部的事件订阅和注销订阅池管理
线程调度辅助工具
RxBinding 使用工具类
RxJava常用方法工具类
1、演示(请star支持)
1.1、RxBus
2、如何使用
目前支持主流开发工具AndroidStudio的使用,直接配置build.gradle,增加依赖即可.2.1、Android Studio导入方法,添加Gradle依赖
先在项目根目录的 build.gradle 的 repositories 添加:allprojects { repositories { ... maven { url "https://jitpack.io" } } }
然后在dependencies添加:
dependencies { ... implementation 'io.reactivex:rxjava:1.2.9' implementation 'io.reactivex:rxandroid:1.2.1' implementation 'com.github.xuexiangjys:RxUtil:1.1' }
3.1、RxBus使用
3.1.1、事件注册订阅
1.使用RxBusUtils.get().onMainThread方法注册事件,并指定订阅发生在主线程。RxBusUtils.get().onMainThread(EventKey.EVENT_HAVE_DATA, new Action1<Event>() { @Override public void call(Event event) { showContent(EventKey.EVENT_HAVE_DATA, event.toString()); } });
2.使用RxBusUtils.get().on方法注册事件,订阅所在线程为事件发生线程,也可指定订阅发生的线程。
RxBusUtils.get().on(EventKey.EVENT_BACK_NORMAL, new Action1<String>() { @Override public void call(String eventName) { final String msg = "事件Key:" + EventKey.EVENT_BACK_NORMAL + "\n EventName:" + eventName + ", 当前线程状态: " + Event.getLooperStatus(); showContent(msg); } });
3.1.2、事件发送
1.使用RxBusUtils.get().post(Object eventName)发送不带数据的事件。RxBusUtils.get().post(EventKey.EVENT_NO_DATA);
2.使用RxBusUtils.get().post(Object eventName, Object content)发送携带数据的事件。
RxBusUtils.get().post(EventKey.EVENT_HAVE_DATA, new Event(EventKey.EVENT_HAVE_DATA, "这里携带的是数据")); RxBusUtils.get().post(EventKey.EVENT_HAVE_DATA, true);
3.1.3、事件注销
1.使用RxBusUtils.get().unregisterAll(Object eventName)取消事件的所有订阅并注销事件。RxBusUtils.get().unregisterAll(EventKey.EVENT_HAVE_DATA);
2.使用RxBusUtils.get().unregister(Object eventName, SubscribeInfo subscribeInfo)取消事件的某个指定订阅。
SubscribeInfo是事件注册订阅后返回的订阅信息。如果在取消该订阅后,该事件如无其他订阅,便自动注销该事件。
RxBusUtils.get().unregister(EventKey.EVENT_CLEAR, mSubscribeInfo);
3.2、RxJavaUtils使用
3.2.1、线程任务
1.RxIOTask:在io线程中操作的任务RxJavaUtils.doInIOThread(new RxIOTask<String>("我是入参123") { @Override public Void doInIOThread(String s) { Log.e(TAG, "[doInIOThread] " + getLooperStatus() + ", 入参:" + s); return null; } });
2.RxUITask:在UI线程中操作的任务
RxJavaUtils.doInUIThread(new RxUITask<String>("我是入参456") { @Override public void doInUIThread(String s) { Log.e(TAG, "[doInUIThread] " + getLooperStatus() + ", 入参:" + s); } });
3.RxAsyncTask:在IO线程中执行耗时操作 执行完成后在UI线程中订阅的任务。
RxJavaUtils.executeAsyncTask(new RxAsyncTask<String, Integer>("我是入参789") { @Override public Integer doInIOThread(String s) { Log.e(TAG, "[doInIOThread] " + getLooperStatus() + ", 入参:" + s); return 12345; } @Override public void doInUIThread(Integer integer) { Log.e(TAG, "[doInUIThread] " + getLooperStatus() + ", 入参:" + integer); } });
4.RxIteratorTask:遍历集合或者数组的任务,在IO线程中执行耗时操作 执行完成后在UI线程中订阅的任务。
RxJavaUtils.executeRxIteratorTask(new RxIteratorTask<String, Integer>(new String[]{"123", "456", "789"}) { @Override public Integer doInIOThread(String s) { RxLog.e("[doInIOThread]" + getLooperStatus() + ", 入参:" + s); return Integer.parseInt(s); } @Override public void doInUIThread(Integer integer) { RxLog.e("[doInUIThread] " + getLooperStatus() + ", 入参:" + integer); } });
3.2.2、订阅者Subscriber
1.SimpleSubscriber:简单的订阅者,已对错误进行捕获处理,并对生命周期进行日志记录。可设置IExceptionHandler接口自定义错误处理,设置ILogger接口自定义日志记录。2.ProgressLoadingSubscriber:带进度条加载的订阅者,实现IProgressLoader接口可自定义加载方式。
Observable.just("加载完毕!") .delay(3, TimeUnit.SECONDS) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new ProgressLoadingSubscriber<String>(mProgressLoader) { @Override public void onNext(String s) { Toast.makeText(RxJavaActivity.this, s, Toast.LENGTH_SHORT).show(); } });
3.3、SubscriptionPool使用
SubscriptionPool:RxJava的订阅池1.增加订阅:add(@NonNull Object tagName, Subscription m) 或者 add(Subscription m, @NonNull Object tagName)
SubscriptionPool.get().add(RxJavaUtils.polling(5, new Action1() { @Override public void call(Object o) { Toast.makeText(RxJavaActivity.this, "正在监听", Toast.LENGTH_SHORT).show(); } }), "polling");
2.取消订阅:remove(@NonNull Object tagName)、remove(@NonNull Object tagName, Subscription m)、removeAll()
SubscriptionPool.get().remove("polling");
3.4、RxBindingUtils使用
1.setViewClicks:设置点击事件RxBindingUtils.setViewClicks(mBtnClick, 5, TimeUnit.SECONDS, new Action1<Void>() { @Override public void call(Void aVoid) { toast("触发点击"); } });
2.setItemClicks:设置条目点击事件
3.5、RxSchedulerUtils使用
订阅发生在主线程 ( -> -> main).compose(RxSchedulerUtils.<T>_main())
订阅发生在io线程 ( -> -> io)
.compose(RxSchedulerUtils.<T>_io())
处理在io线程,订阅发生在主线程( -> io -> main)
.compose(RxSchedulerUtils.<T>_io_main())
处理在io线程,订阅也发生在io线程( -> io -> io)
.compose(RxSchedulerUtils.<T>_io_io())
相关文章推荐
- 重复造轮子,编写一个轻量级的异步写日志的实用工具类(LogAsyncWriter)
- 一个实用的java字符串工具类(截取,去尾,转码)
- Aveiconifier是一个非常实用方便的制作ico格式文件的小工具~
- 分享一个笔记本实用工具
- Scott Hanselman's 推荐的的实用工具集合(2011版)
- LogCook 一个简单实用的Android日志管理工具
- 介绍一个实用的小工具
- 常用工具集合(实用工具,游戏专区…
- 用C# 做的一个小而实用的 <文件重命名批处理> 工具
- 一个非常实用的Android开源工具类库
- 嘿,写了一个简单实用的终端翻译工具,或许有人也会喜欢
- 微信公众平台最实用的工具和技巧大集合
- 发一个自己用JS写的实用看图工具
- 一个实用的数据库和redis的心跳检测工具类
- 推荐一个实用工具wampserver
- iptraf:一个实用的TCP/UDP网络监控工具
- 一个高效的JavaScript压缩工具下载集合
- 【小工具】一个简单实用的jQuery手风琴
- 发一个自己用JS写的实用看图工具实现代码
- 发布一个小的实用工具-机票助手