Android从零开始学习Rxjava2(一)

前言

越来越多的开源项目使用了rxjava2,最近才开始认真的沉下来学习rxjava2,想写个笔记记录和整理下自己所学,顺便可以加深下印象。


学习rxjava2,首先要大概了解下它能做什么,为什么选择使用它?
翻看git上rxjava说明,a library for composing asynchronous and event-based programs by using observable sequences.(一个库,用于通过使用可观察序列来编写异步和基于事件的程序)。这句话重点就是rxjava是编写异步的库。那我们使用异步已经有AsyncTask和Handler,那为什么还要使用rxjava呢?那是因为rxjava来实现异步更简洁、更容易、代码逻辑更清晰,而且还有很多和android相关的库,可以很方便的在其他线程和主线程中来回切换。

首先我们来简单说下rxjava的一些基本内容。rxjava是通过扩展的观察者模式来实现的。
作为观察者模式,它有几个部分Observables(被观察者)、Observable(观察者)、subscribe(订阅)和event(事件)。Observable(被观察者) subscribe(订阅) Observer (观察者)实现订阅关系,Observable Emitter(发射)事件由已经订阅的Observer接收并处理。

看下简单的图解
在这里插入图片描述

空说可能不好理解,我们来写一下代码实现下。
android开发者使用rxjava2,应该在gradle中引用两个库文件,如下

	// RxJava2 Dependencies
    implementation 'io.reactivex.rxjava2:rxjava:2.2.2'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'

1.创建一个Observable(被观察者)

private Observable<String> getObservable() {
        return Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> emitter) throws Exception {
                emitter.onNext("1");
                emitter.onNext("2");
                emitter.onNext("3");
                emitter.onComplete();
            }
        });
    }

2.创建一个Observer(观察者)

private Observer<String> getObserver() {
        return new Observer<String>() {
            @Override
            public void onSubscribe(Disposable d) {
            }
            @Override
            public void onNext(String value) {
                Log.d(TAG, " onNext : value : " + value);
            }
            @Override
            public void onError(Throwable e) {
                Log.d(TAG, " onError : " + e.getMessage());
            }
            @Override
            public void onComplete() {
                Log.d(TAG, " onComplete");
            }
        };
    }

3.Observable(被观察者) subscribe(订阅) Observer (观察者)实现订阅关系

getObservable()
                // Run on a background thread
                .subscribeOn(Schedulers.io())
                // Be notified on the main thread
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(getObserver());

在上面的例子中,上游Observable Emitter(发射)了四个事件

emitter.onNext("1");
emitter.onNext("2");
emitter.onNext("3");
emitter.onComplete();

下游观察者依次打印结果如下

onNext : value : 1
onNext : value : 2
onNext : value : 3
onComplete

示例图
在这里插入图片描述

我们可以注意到Observer中有四个方法onSubscribe、onNext、onError和onComplete,其实这几个方法被调用的时机可以通过他们的名称就有所了解。onSubscribe被订阅的时候触发,onNext、onError和onComplete都是Observable Emitter主动发射后接收触发。

对于Observer (观察者)的几个方法,有以下几点注意即可:

onNext():可以接收多次 onNext() 事件,当onCompleted或者onError后,emitter再次发射新的 onNext() 事件不再被接收到。
onCompleted(): 事件队列完结。RxJava 不仅把每个事件单独处理,还会把它们看做一个队列。RxJava 规定,当不会再有新的 onNext() 发出时,需要触发 onCompleted() 方法作为标志。
onError(): 事件队列异常。在事件处理过程中出异常时,onError() 会被触发,同时队列自动终止,不允许再有事件发出。

在一个正确运行的事件序列中, onCompleted() 和 onError() 有且只有一个,并且是事件序列中的最后一个。需要注意的是,onCompleted() 和 onError() 二者也是互斥的,即在队列中调用了其中一个,就不应该再调用另一个。


参考资料,参考但不局限以下链接
https://gank.io/post/560e15be2dca930e00da1083
https://blog.csdn.net/qq_29366131/article/details/75529902

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
从零开始Android的SystemUI,需要具备一些基本的知识和技能。首先,你需要熟悉Java编程语言和Android开发的基础知识。了解Android的Activity、Service、BroadcastReceiver等组件的用法和生命周期。 接下来,你需要理解SystemUI是Android系统的一部分,是用于管理和显示系统状态栏、导航栏等界面元素的应用程序。它需要与底层系统进行交互,并实现对其进行控制和更新。你可以参考Android源代码中的SystemUI模块,了解其结构和基本原理。 在编写SystemUI之前,可以先定义你的项目目标和需求。你可以思考你想实现的功能和界面样式。然后,创建一个新的Android项目,并启动一个新的进程用于运行SystemUI。你可以在AndroidManifest.xml文件中注册你的SystemUI服务组件。 接下来,你可以开始编写SystemUI的代码。你可以创建一个主Activity来加载和管理系统状态栏和导航栏的布局。可以使用Android提供的View类来创建和显示界面元素。你还可以利用Android系统提供的API来获取和更新系统状态信息。 在编写SystemUI时,你需要考虑到系统UI的响应性和性能。你可以使用线程和异步任务来处理后台操作,以避免阻塞UI线程。此外,你还可以使用Android的Notification和Broadcast机制与其他应用程序进行通信。 最后,你可以进行调试和测试你的SystemUI应用程序。你可以使用Android设备或模拟器来运行你的应用,并逐步验证功能的正确性和稳定性。 总结而言,从零开始编写Android的SystemUI需要对Android开发有一定的了解和经验。通过学习Android的基础知识、阅读源代码、分析需求和目标,你可以逐步构建一个可靠和功能丰富的SystemUI应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值