RxUtil
一個實用的RxJava1工具類庫
如果你使用的是RxJava2,請移步RxUtil2
關于我
内容
-
- RxBus 支援多事件定義,支援資料攜帶,支援全局和局部的事件訂閱和登出
- 訂閱池管理
- 線程排程輔助工具
- RxBinding 使用工具類
- RxJava常用方法工具類
1、示範(請star支援)
1.1、RxBus
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-YWan5iN2MTO1QmNjJjN1UWNyU2YxYzX5IDNzUDMxMzLcJTMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.gif)
Demo下載下傳
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())
聯系方式