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
- RxJava 学习笔记(一)
- RxJava学习笔记(一)
- RxJava学习笔记(一)
- RxJava 学习笔记一
- RxJAVA学习笔记(一)
- Rxjava学习笔记(一)
- Rxjava学习笔记(一)
- RxJava学习笔记(一)--- 基础篇
- RxJava学习笔记(一)概念
- RxJava学习笔记之初识(一)
- RxJava 学习(一)
- RxJava学习(一)
- RXjava学习(一)
- Rxjava学习(一)
- RxJava学习(一),RxJava初识
- RxJava 学习之(一)
- 记Rxjava 学习(一)
- 【RxJava】的学习(一)
- 并查集
- JQuery日历插件My97DatePicker日期范围限制
- xampp安装完后的工作及问题
- 三层网络最终培训总结
- 逆转字符串Reverse String
- RxJava 学习笔记(一)
- Activity生命周期
- VIM编辑器中去掉windows环境下残留换行^M的方法
- GreenDao的使用详解
- Java学习笔记(12)Exception Handling and Text I/O
- codeforces202A. Mafia【二分】
- 二叉堆
- Summary Ranges
- SSL协议详解