| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> 一篇不太一样的RxJava介绍,Android MVP模式详解 -> 正文阅读 |
|
[移动开发]一篇不太一样的RxJava介绍,Android MVP模式详解 |
所以在我们的角度,我们是被动的,也就是英语中的reactive ,也就是所谓的响应式 我们回到我们的例子: 同步的时候,我们是这样的 interface Model{ fun getBitmap(metaData : MetaData) : Bitmap 而异步的时候,我们的方法没有了返回值,多了个参数,所以不能使用漂亮的**“链式调用”。 这是因为List 本身,就是一种同步的类型。我们每次操作List,都是对List来拉取**数据。不信?我们来看下: 大家都知道List并不是最基础的集合,常用的集合还有HashMap,Set,Table,Vector等等等等。他们都有一个共同的父类: Iterable interface Iterable { 这里的iterator就是迭代器,他是这个样子的 interface Iterator { fun next(): T fun hasNext(): Boolean 使用的时候也就是我们最麻烦的迭代方式: val i = iterator() 所以我们在Java中有了foreach,以及后面的stream api等等语法糖。 这里我们看到了,我们每次确实首先询问List,有没有值,如果有我们获取这个值,如果没有,跳出循环,对List的操作结束。读取完毕。 想象一下,如果我们有一种 interface Model{ fun getBitmap(metaData : MetaData) : Bitmap 我们就可以像同步一样, model.getList() 现在我们来根据 interface AsyncIterable { (看起来好像有点眼熟?) 我们再来设计 fun hasNext(has : Boolean) 对的,通过这种类似CallBack的方式,通知我们有没有值。true就是还有值,一旦接收到false,就代表迭代结束,我们的 fun onNext(current:T) (是不是有些眼熟?(手动滑稽)) 这里有两个问题: 第一个问题:我们在这里隐藏了一个错误,因为hasNext()方法返回 false的时候不一定是没有接下来的值了,也有可能是处理当前值的时候出现了某些个错误或者异常,这样他就不能处理接下来的值,这时候我们的app就会崩溃。所以在异步的时候,我们希望我们的 fun onError(e:Throwable) (是不是也有些眼熟?(手动滑稽)) 第二个问题,在hasNext方法显然有些过于多余,因为在同步的时候,我们并不知道他究竟接下来有没有值,所以我们每次访问List的时候,要询问还有没有接下来的值,我们再进行下一步。而异步的时候,我们的 fun onComplete() 这样,我们有了我们的 interface AsyncIterator { fun onNext(current:T): fun onComplete() fun onError(e:Throwable) 对的,他就是我们RxJava中的 interface Observable { 由此,我给
对的,他就是一个集合,和List,Set,Vector一样。他是一组数据,Collection可以包含0,1很多甚至无限个数据。所以 当我们在处理Collection出现异常时(比如NullPointerException),我们的程序会崩溃,不会有接下来的处理。所以我们的Observable在收到onError之后,也不会再有数据推送给我们。 Collection可以通过高阶函数(High Oroder Function)进行组合,变换等等,所以作为集合之一的Observable也可以进行组合,变换。 对`
Iterable 对 我们费了这么大力气,终于抽象出来一个异步的集合。那么他的好处是什么呢?
fun?getList(callback:CallBack<List
这个方法。我们通过callback知道了,这应该是一个异步操作。可能是耗时的,所以我们可能需要一个线程来执行他,执行之后,他又会给我一个List,而这个list却又是同步的。你需要关心的事情太多了。 俗话说,把握现在 展望未来! 我们能处理好现在的事情就已经很不错了,Observable则解决了这一问题。我们上面的方法改完之后应该是这样的 fun getList() : Observable<List
最正确的可能应该是这样的: fun getList() : Observable
|
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 8:55:12- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |