资讯专栏INFORMATION COLUMN

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

keke / 1711人阅读

摘要:本文目标本文的目标是使用尽可能少的内容向你展示如何在中使用编写一个最简单的异步任务。如果你是初学者可以通过本文以最快的速度开启你的之旅。相反的我希望本文的作用更加类似于一个快速上手的手册。新人可以快速上手,老手也可以快速参考。

本文目标

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

开发环境

AndroidStudio 2.1.2

CompileSdkVersion 23

BuildToolsVersion 23.0.2

Rxjava 1.1.7

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官方文档
本文代码

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64986.html

相关文章

  • Rxjava快速使用手册——简单异步任务

    摘要:本文目标本文的目标是使用尽可能少的内容向你展示如何在中使用编写一个最简单的异步任务。如果你是初学者可以通过本文以最快的速度开启你的之旅。相反的我希望本文的作用更加类似于一个快速上手的手册。新人可以快速上手,老手也可以快速参考。 本文目标 本文的目标是使用尽可能少的内容向你展示如何在Android中使用Rxjava编写一个最简单的异步任务。如果你是初学者可以通过本文以最快的速度开启你的R...

    Caizhenhao 评论0 收藏0
  • android文章精选 - 收藏集 - 掘金

    摘要:瘦身项目实战掘金导语是腾讯海外布局的一个音乐产品,年发布以来已经成为个国家和地区排名第一的音乐。一导入未来的设计师需要知道的个技能设计掘金技术行业的发展步伐正在越来越快。 Android APK 瘦身 - JOOX Music 项目实战 - Android - 掘金导语 JOOX Music是腾讯海外布局的一个音乐产品,2014年发布以来已经成为5个国家和地区排名第一的音乐App。东南...

    airborne007 评论0 收藏0
  • 深入Android RxJava 2

    摘要:为什么要用响应式编程为什么响应式编程突然间流行起来。这些都是异步方式发生的。它也是上第一个可以用于响应式编程的库。这是因为背压必须处理。对于有限的数据源来说,我们会有两个终结事件,一个是,一个是表示成功,表示错误。 这篇文章是根据Jake Wharton在GOTO CopenHagen 2016上的讲话整理的。 下一个版本(2.0)的RxJava还在开发中。虽然observable、订...

    Eastboat 评论0 收藏0
  • Android通用流行框架大全

    Android通用流行框架大全 showImg(https://segmentfault.com/img/remote/1460000006765773); 1. 缓存 名称 描述 DiskLruCache Java实现基于LRU的磁盘缓存 2.图片加载 名称 描述 Android Universal Image Loader 一个强大的加载,缓存,展示图片的库 P...

    Near_Li 评论0 收藏0
  • RxJava系列一(简介)

    摘要:响应式编程在介绍前,我们先聊聊响应式编程。响应式编程的一个关键概念是事件。今天,响应式编程最通用的一个场景是我们的移动必须做出对网络调用用户触摸输入和系统弹框的响应。并于年二月份正式向外展示了。 转载请注明出处:https://zhuanlan.zhihu.com/p/20687178 RxJava系列1(简介) RxJava系列2(基本概念及使用介绍) RxJava系列3(转换操作...

    figofuture 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<