Rjava快速使用手册——最简单的异步任务

本文目标

本文的目标是使用尽可能少的内容向你展示如何在Android中使用Rxjava编写一个最简单的异步任务。如果你是初学者可以通过本文以最快的速度开启你的Rxjava之旅。如果你已经接触过了Rxjava可以将本文作为一篇随时取用的手册使用。

开发环境

  1. AndroidStudio 2.1.2

  2. CompileSdkVersion 23

  3. BuildToolsVersion 23.0.2

  4. Rxjava 1.1.7

  5. Rxandroid 1.2.1

依赖引用

    compile 'io.reactivex:rxjava:1.1.7'    compile 'io.reactivex:rxandroid:1.2.1'

如何使用

    /      * 这是rxjava执行一个异步任务的基础架子     */    Observable.create(new Observable.OnSubscribe() {        @Override        public void call(Subscriber subscriber) {            //TODO 异步任务开始执行            subscriber.onNext(new Object());//将执行结果返回            subscriber.onCompleted();//结束异步任务        }    })            .subscribeOn(Schedulers.io())//异步任务在IO线程执行            .observeOn(AndroidSchedulers.mainThread())//执行结果在主线程运行            .subscribe(new Subscriber() {                @Override                public void onStart() {                    //TODO 异步任务执行前的操作                    super.onStart();                }                @Override                public void onCompleted() {                    //TODO 异步任务执行完后的操作                }                @Override                public void onError(Throwable e) {                    //TODO 异步任务执行失败后的操作                }                @Override                public void onNext(Object o) {                    //TODO 处理异步任务的执行结果                }            });

举个栗子

    /      * 在这个栗子中将展示使用rxjava执行一个最简单的异步任务     * 栗子将会完成如下工作     * 1. 在任务执行前显示进度条     * 2. 线程休眠1秒,模拟异步任务的执行,然后返回一段字符串作为执行结果     * 3. 关闭进度条,处理异步任务的执行结果     */    private void executeAsyncTask() {        //Observable# create方法创建一个异步任务        Observable.create(new Observable.OnSubscribe() {            @Override            public void call(Subscriber subscriber) {                //在call方法中执行异步任务                try {                    Thread.sleep(1000);                } catch (InterruptedException e) {                    //注意:如果异步任务中需要抛出异常,在执行结果中处理异常。需要将异常转化未RuntimException                    throw new RuntimeException(e);                }                count++;                //调用subscriber# onNext方法将执行结果返回                subscriber.onNext("成功执行异步任务" + count + "次");                //调用subscriber# onCompleted方法完成异步任务                subscriber.onCompleted();            }        })                .subscribeOn(Schedulers.io())//指定异步任务在IO线程运行                .observeOn(AndroidSchedulers.mainThread())//制定执行结果在主线程运行                .subscribe(new Subscriber() {                    ProgressDialog progressDialog;                    @Override                    public void onStart() {                        //在异步任务执行前打开进度条                        super.onStart();                        Log.i(TAG, "onStart");                        if (progressDialog == null)                            progressDialog = ProgressDialog.show(MainActivity.this, "", "正在执行异步任务");                    }                    @Override                    public void onCompleted() {                        //在异步任务执行完成后关闭进度条                        Log.i(TAG, "onCompleted");                        if (progressDialog != null) {                            progressDialog.dismiss();                            progressDialog = null;                        }                    }                    @Override                    public void onError(Throwable e) {                        //如果异步任务执行失败则关闭进度条,并打印错误日志                        if (progressDialog != null) {                            progressDialog.dismiss();                            progressDialog = null;                        }                        Log.e(TAG, "onError: execute async task fail", e);                    }                    @Override                    public void onNext(String s) {                        //处理异步任务的执行结果                        Log.i(TAG, "onNext");                        tvContent.setText(s);                    }                });    }

关于本文

目前网上有很多关于rxjava不错的文章,在后面完也会附上地址。但是本文的目的不是详细的介绍rxjava的各种特性、最佳实践、实现原理。相反的我希望本文的作用更加类似于一个快速上手的手册。新人可以快速上手,老手也可以快速参考。

补充链接

给 Android 开发者的 RxJava 详解
Rxjava项目地址
Rxjava官方文档
本文代码

关键字:android, java, rxjava


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部