RxJava 学习笔记(一)

来源:互联网 发布:excel表格怎么恢复数据 编辑:程序博客网 时间:2024/06/05 10:17

一:什么是RxJava

  • Rx是响应式编程的意思,本质是观察者模式,是以观察者(Observer)和订阅者(Subscriber)为基础的一部响应方式。

  • 在Android编程时, 经常会使用后台线程, 那么就可以使用这种方式. 目前的异步编程方式都会导致一些问题, 如

    1. Asynctasks can easily lead to memory leaks. 2. CursorLoaders with a ContentProvider require a large amount of configuration and boilerplate code to setup. 3. Services are intended for longer running background tasks and not fast-finishing operations, such as making a network call or loading content from a database.4. 访问网络接口调用返回数据,尤其在使用接口回调时候,处理数据很麻烦
  • RxJava 有四个基本概念:Observable(被观察者)、Observer(观察者)、subscribe(订阅)、事件。

  • Observable 和 Observer 通过 subscribe()方法实现订阅关系,从而 Observable 可以在需要的时候发出事件来通知Observer。

二: 传统观察者模式

  • 最简单的例子就是:警察抓小偷,警察需要在小偷伸手左岸的时候实施抓捕。在这个例子里,警察是观察者,小偷是被观察者,警察需要时刻盯着小偷的一举一动,才能保证不会搂过任何瞬间。

  • 现在我们就写两个demo,来模拟警察抓小偷的情景(1.用普通的方式 2.用java自带api)

1)自定义方法

  • 定义一个观察者接口
  • 定义一个被观察这接口
  • 分别实现他们

被观察者接口

public interface Watched {    public void addWatcher(Watcher watcher);    public void removeWatcher(Watcher watcher);    public  void  notifyWatchers(String str);}

观察者接口

public interface Watcher {    public  void  update(String str);}

被观察者接口实现 (小偷

public class ConcreteWatched implements Watched {    private List<Watcher> list = new ArrayList<>();    @Override    public void addWatcher(Watcher watcher) {        list.add(watcher);    }    @Override    public void removeWatcher(Watcher watcher) {        list.remove(watcher);    }    @Override    public void notifyWatchers(String str) {        for (Watcher watcher : list) {            watcher.update(str);        }    }}

观察者接口实现(警察

public class ConcreteWatcher implements  Watcher {    @Override    public void update(String str) {        System.out.println(str);    }}

测试调用

public class Test {    public static void main(String[] args) throws Exception{        Watched xiaoming = new ConcreteWatched();        Watcher watcher1 = new ConcreteWatcher();        Watcher watcher2 = new ConcreteWatcher();        Watcher watcher3 = new ConcreteWatcher();        xiaoming.addWatcher(watcher1);        xiaoming.addWatcher(watcher2);        xiaoming.addWatcher(watcher3);        xiaoming.notifyWatchers("我要偷东西了");    }}

2)java API实现

创建一个被观察者

public class SimpleObservable extends Observable {    private int data = 0;    public  int getData(){        return data;    }    public  void  setData(int i){        if (this.data!=i){            this.data = i;            setChanged();//发生改变            notifyObservers();//通知观察者,表示状态发生改变        }    }}

创建一个观察者

public class SimpleObserver implements Observer {    public SimpleObserver(SimpleObservable observable) {        observable.addObserver(this);    }    //当被观察者状态发生改变的时候会调用    public void update(Observable observable, Object object) {        System.out.println("data is changed:" + ((SimpleObservable) observable).getData());    }}

测试类

public class MyTest {    public static void main(String[] args) throws Exception {        SimpleObservable simple = new SimpleObservable();        SimpleObserver observer = new SimpleObserver(simple);        simple.setData(1);        simple.setData(2);        simple.setData(2);        simple.setData(3);    }}

三: 环境配置

app 下的 build.gradle

apply plugin: 'com.android.application'apply plugin: 'me.tatarka.retrolambda'android {...    compileOptions {        sourceCompatibility JavaVersion.VERSION_1_8        targetCompatibility JavaVersion.VERSION_1_8    }}dependencies {...compile 'io.reactivex:rxjava:1.1.0'compile 'io.reactivex:rxandroid:1.1.0'}

整个工程下的 build.gradle

buildscript {    repositories {        jcenter()    }    dependencies {        classpath 'com.android.tools.build:gradle:1.5.0'        classpath 'me.tatarka:gradle-retrolambda:2.5.0'    }}allprojects {    repositories {        jcenter()    }}task clean(type: Delete) {    delete rootProject.buildDir}

免责声明:一切学习资料都是从网上获得,只是自己做了自己的总结和记录

1 0
原创粉丝点击