文章目录

  • 1.简介
  • 2.特性
  • 3.演示
    • 3.1 集成
    • 3.2 布局文件
    • 3.3 代码实现
  • 4.源码地址

1.简介

RxJava,是一个开发库、是一种代码风格、也是一种思维方式。为了让Rxjava适配到Android平台上,RxAndroid应运而生。RxJava相当热门,在GItHub的官方网站:Rxjava上已拥有42k的Star数,可见其受欢迎的程度。

RxJava的特点是简洁、优雅、高效,它的优点是多线程切换简单、数据变换容易、代码简洁可读性好、第三方支持丰富易于开发;缺点是学习成本较高、出错难以排查。

怎么理解这个学习成本较高呢?说实话,要想正确使用RxJava,需要学习其中的很多概念,思想,很容易劝退无法理解的学习者(传说中的上手难)。而RxJava又经历从1.0、2.0、3.0这三个大型版本的迭代,其中更新的api数不胜数,让RxJava的学习变得越发艰难。

RxJava拥有很多个比较鲜明的特点:响应式编程链式编程观察者模式等。若想深究这些特点需要耗费相当多的时间,所以这里就不再赘述。鉴于作者的水平有限,这里仅展示RxJava的基本功能:即异步数据交互,更多的功能,可以参考下一小节列出的博客。

2.特性

为了不误人子弟,这里就不再描述RxJava的一些特性,而是列举出几篇作者在学习RxJava中写的比较好的博文,建议按照顺序阅读:

  1. RxAndroid使用初探—简洁、优雅、高效:这篇博文写的比较容易令人理解,阅读完后基本上就能了解RxJava的基本特性和使用
  2. 给 Android 开发者的 RxJava 详解:这篇博文介绍了RxJava的运作机制,对于了解RxJava的运作大有帮助
  3. 大佬们,一波RxJava 3.0来袭,请做好准备~:这边博文将RxJava3.0的新特性写的相当详细,对于想要深入了解的读者相当有帮助

关于RxJava的应用有很多,也有很多比较方便配合RxJava的框架,如RxPermissionRxLifeCycleRxCacheRxBus等等,有兴趣的读者可以查询相关资料,这里不再赘述。

3.演示

3.1 集成

在使用RxJava前,我们需要先导入相应依赖,由于要使用在Android平台上,所以还需要导入RxAndroid的依赖。与此同时,若在Android O版本以上使用RxJava,还需要导入compileOptions闭包,声明JDK版本,整体的module下的build.gradle代码如下:

apply plugin: 'com.android.application'android {    compileSdkVersion 29    buildToolsVersion "29.0.3"    defaultConfig {        applicationId "com.androidframelearn.event_rxjava"        minSdkVersion 16        targetSdkVersion 29        versionCode 1        versionName "1.0"        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'        }    }    compileOptions {        sourceCompatibility JavaVersion.VERSION_1_8        targetCompatibility JavaVersion.VERSION_1_8    }}dependencies {    implementation fileTree(dir: 'libs', include: ['*.jar'])    implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'    // Because RxAndroid releases are few and far between, it is recommended you also    // explicitly depend on RxJava's latest version for bug fixes and new features.    // (see https://github.com/ReactiveX/RxJava/releases for latest 3.x.x version)    implementation 'io.reactivex.rxjava3:rxjava:3.0.0'    implementation 'androidx.appcompat:appcompat:1.1.0'    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'    testImplementation 'junit:junit:4.12'    androidTestImplementation 'androidx.test.ext:junit:1.1.1'    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'}

根据官方的建议,最好在整体项目的build.gradle下添加RxJava的Maven仓库,这样下载会更快一些,代码如下:

// Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript {        repositories {        google()        jcenter()        mavenCentral() // add repository        maven { url "https://oss.jfrog.org/libs-snapshot" }    }    dependencies {        classpath 'com.android.tools.build:gradle:3.6.1'        classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0' // add plugin                // NOTE: Do not place your application dependencies here; they belong        // in the individual module build.gradle files    }}allprojects {    repositories {        google()        jcenter()        mavenCentral() // add repository        maven { url "https://oss.jfrog.org/libs-snapshot" }    }}task clean(type: Delete) {    delete rootProject.buildDir}

3.2 布局文件

这里想要演示一个简单的功能:点击按钮后改变文本,只需要在布局文件上添加一个按钮和一个文本控件,修改activity_main.xml,代码如下:

<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <Button        android:id="@+id/btn_run_scheduler"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="开始订阅"/>    <TextView        android:id="@+id/tv_test"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="测试文本"        android:textSize="100sp"/>LinearLayout>

3.3 代码实现

修改MainActivity,在相应的代码块上均有详细的注释。建议先阅读RxJava的详细介绍博文后再来看这个例子,会相对容易理解一些,代码如下:

package com.androidframelearn.event_rxjava;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.TextView;import io.reactivex.rxjava3.annotations.NonNull;import io.reactivex.rxjava3.core.Observable;import io.reactivex.rxjava3.core.ObservableEmitter;import io.reactivex.rxjava3.core.ObservableOnSubscribe;import io.reactivex.rxjava3.core.Observer;import io.reactivex.rxjava3.disposables.Disposable;public class MainActivity extends AppCompatActivity {    private static final String TAG = "MainActivity";    private Button btn_run_scheduler;    private TextView tv_test;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        // 0.获取控件实例        btn_run_scheduler = findViewById(R.id.btn_run_scheduler);        tv_test = findViewById(R.id.tv_test);        // 1.创建被观察者        Observable observable = Observable.create(new ObservableOnSubscribe<String>() {            // 2.实现回调方法subscribe()            @Override            public void subscribe(@NonNull ObservableEmitter<String> emitter) throws Throwable {                // 3.发送String类型的消息                emitter.onNext("测试RxJava!");                // 4.完成消息的发送                emitter.onComplete();            }        });        // 5.创建观察着        Observer observer = new Observer<String>() {            // 6.订阅后执行的方法            @Override            public void onSubscribe(@NonNull Disposable d) {            }            // 7.当被观察者执行onNext()的回调            @Override            public void onNext(@NonNull String s) {                tv_test.setText(s);                Log.i(TAG,"收到消息啦!");            }            // 8.当被观察者执行onError()的回调            @Override            public void onError(@NonNull Throwable e) {            }            // 9.当被观察者执行onComplete()的回调            @Override            public void onComplete() {                Log.i(TAG,"消息接收已结束!");            }        };        // 10.注册按钮点击事件        btn_run_scheduler.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                observable.subscribe(observer);            }        });    }}

4.源码地址

AFL——Android框架学习

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. android 调用 python
  3. Kotlin概述之Kotlin for Android
  4. Xamarin发布XobotOS源码,C# 实现的Android系统 - 操作系统 - ITey
  5. Eclipse下Android的代码调试
  6. android 4.2的新特性layoutRtl,让布局自动从右往左显示
  7. android6.0M系统在代码中实现请求以及检查权限。
  8. Android(安卓)HttpClient && HttpPost简单使用
  9. 《Android(安卓)开发工具 Android(安卓)Studio》巧用 Live Templ

随机推荐

  1. Android第一讲笔记(常用控件以及线性布局
  2. 在Android中使用FFmpeg(android studio环
  3. Android通过http协议POST传输方式
  4. Android(安卓)O添加Settings设置项的方法
  5. 【Android导航决】环境插件配置笔记
  6. Android之SeekBar的简单使用
  7. Top10 应用都在用的Android最新知识
  8. Android(安卓)Menu小例子
  9. Android体系结构
  10. android 5.0修改插电显示电池百分比,拔掉