RxJava工具类

来源:互联网 发布:没有网站外链好优化么 编辑:程序博客网 时间:2024/06/05 17:32

为了快速实现在UI线程或者IO线程中工作,实现了一下工具类。当时参考了许多博客,可惜当时没有记录,现在也回忆不起来了。写在这里以备以后的使用。

1 RxjavaUtil.java

/** * Rxjava封装工具类 */public class RxjavaUtil {    /**     * 在ui线程中工作     * @param uiTask     */    public static <T> void doInUIThread(IUITask uiTask) {        Observable.just(uiTask)                .observeOn(AndroidSchedulers.mainThread())                .subscribe(uitask -> uitask.doInUIThread(), throwable -> throwable.printStackTrace());    }    /***     * 在IO线程中执行任务     * @param <T>     */    public static <T> void doInIOThread(IIOTask ioTask) {        Observable.just(ioTask)                .observeOn(Schedulers.io())                .subscribe(ioTask1 -> ioTask1.doInIOThread(), throwable -> throwable.printStackTrace());    }    /**     * 执行Rx通用任务 (IO线程中执行耗时操作 执行完成调用UI线程中的方法)     */    public static <T> void executeRxTask(CommonRxTask<T> t) {        CommonRxTask.MyOnSubscribe<CommonRxTask<T>> onsubscribe = new CommonRxTask.MyOnSubscribe<CommonRxTask<T>>(t) {            @Override            public void call(Subscriber<? super CommonRxTask<T>> subscriber) {                getC().doInIOThread();                subscriber.onNext(getC());                subscriber.onCompleted();            }        };        Observable.create(onsubscribe)                .subscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(t1 -> t1.doInUIThread(), throwable -> throwable.printStackTrace());    }}

2 ICommonRxTask.java

/** * 通用任务接口 */public interface ICommonRxTask {    /**     * 在IO线程执行     */    void doInIOThread();    /**     * 在UI线程执行     */    void doInUIThread();}

3 CommonRxTask.java

/** * 通用的Rx执行任务 */public abstract class CommonRxTask<T> implements ICommonRxTask {    public CommonRxTask(T t) {        this.t = t;    }    protected T t;    /**     * 在IO线程执行     */    public void doInIOThread() {    }    /**     * 在UI线程执行     */    public void doInUIThread() {    }    public static abstract class MyOnSubscribe<C> implements Observable.OnSubscribe<C> {        private C c;        public MyOnSubscribe(C c) {            this.c = c;        }        public C getC() {            return c;        }        public void setC(C c) {            this.c = c;        }    }}

4 IIOTask.java

/** * IO任务接口 */public interface IIOTask {    void doInIOThread();}

5 IOTask.java

/** * 在IO线程中执行的任务 */public abstract class IOTask<T> implements IIOTask {    protected T t;    public IOTask(T t) {        this.t = t;    }    public IOTask() {    }    public abstract void doInIOThread();}

6 IUITask.java

/** * UI任务接口 */public interface IUITask {    void doInUIThread();}

7 UITask.java

/** * 在主线程中执行的任务 */public abstract class UITask<T> implements IUITask {    protected T t;    public UITask(T t) {        this.t = t;    }    public UITask() {    }}

8 使用

RxjavaUtil.doInUIThread(() -> {//此处在UI线程执行});RxjavaUtil.doInIOThread(()->{//此处在IO线程中});
原创粉丝点击