RxJava(十三):RxAndroid 2.x 和 Retrofit 的使用

2020-01-20
阅读 15 分钟
9k
近几年 RxJava 逐渐成为 Android 开发的新宠,越来越多的 Android 开发者正在使用或者即将使用 RxJava 。要想在 Android 上使用 RxJava, RxAndroid 必不可少.

RxJava(十二):RxBinding

2020-01-19
阅读 12 分钟
7.3k
RxBinding 是 Jake Wharton 大神写的框架,它的 API 能够把 Android 平台和兼容包内的 UI 控件变为 Observable 对象,这样就可以把 UI 控件的事件当作 RxJava 中的数据流来使用了。

RxJava(十一): 并行编程

2020-01-19
阅读 7 分钟
5.5k
被观察者( Observable/Flowable/Single/Completable/May )发射的数据流可以经历各种线程切换,但是数据流的各个元素之间不会产生并行执行的效果。井行不是并发,也不是同步,更不是异步。

RxJava(十):Disposable 和 Transformer的使用

2020-01-17
阅读 7 分钟
7.8k
在 Rx.Java l.x 中, Observable.subscribe() 方法会返回一个 Subscription 的对象。也就是说,我们每次订阅都会返回 Subscription。Subscription 只需调用 unsubscribe 就可以取消订阅。

RxJava(九):背压

2020-01-17
阅读 7 分钟
6.1k
在 RxJava 中, 会遇到被观察者发送消息太快以至于它的操作符或者订阅者不能及时处理相关的消息,这就是典型的背压( Back Pressure )场景。

RxJava(八):合并操作符和连接操作符

2020-01-17
阅读 16 分钟
5.3k
博客主页 RxJava 的合并操作符主要包括如下几个: startWith :在数据序列的开头增加一项数据 merge :将多个 Observable 合并为一个 mergeDelayError :合并多个 Observable,让没有错误的 Observable 都完成后再发射错误通知 zip :使用一个函数组合多个 Observable 发射的数据集合,然后再发射这个结果 combineLatest...

Rxjava(七):条件操作符和布尔操作符

2020-01-16
阅读 9 分钟
4.1k
defaultlfEmpty :发射来自原始 Observable 的数据,如果原始 Observable 没有发射数据,则发射一个默认数据

RxJava(六):过滤操作符

2020-01-16
阅读 15 分钟
4k
博客主页 RxJava 的过滤操作符主要包括以下几种: filter:过滤数据 takeLast:只发射最后的 N 项数据 last :只发射最后一项数据 lastOrDefault:只发射最后一项数据,如果 Observable 空,就发射默认值。 takeLastBuffer :将最后的 N 项数据当作单个数据发射 skip :跳过开始的 N 项数据 skipLast:跳过最后的 N 项数...

RxJava(五):变换操作符

2020-01-16
阅读 9 分钟
3.3k
flatMap、 concatMap 和 flatMapIterable:将 Observable 发射的数据集合变换为 Observables 集合,然后将这些 Observable 发射的数据平坦化地放进一个单独的 Observable 中

RxJava(四):线程操作

2020-01-15
阅读 19 分钟
5.9k
RxJava 是一个为异步编程而实现的库,异步是其重要特色,合理地利用异步编程能够提高系统的处理速度。但是异步也会带来线程的安全问题,而且异步并不等于并发,与异步概念相对应的是同步。

RxJava(三):创建操作符

2020-01-14
阅读 9 分钟
5.3k
博客主页 RxJava 的创建操作符主要包括如下内容: create —— 使用一个函数从头创建一个 Observable defer —— 只有当订阅者订阅才创建 Observable ,为每个订阅创建一个新的 Observable empty —— 创建一个什么都不做直接通知完成的 Observable never —— 创建一个不发射任何数据 Observable error —— 创建一个什么都不做直...

RxJava(二):基础知识

2020-01-14
阅读 29 分钟
4k
Observable 字面意思是被观察者,使用 RxJava 需要创建一个被观察者,它会决定什么时候触发事件以及触发怎样的事件。有点类似上游发送命令,可以在这里决定异步操作模块的顺序和异步操作模块的次数。

RxJava(一):介绍

2020-01-14
阅读 4 分钟
3.4k
如果你曾经使用过 Java ,那么你 定听说过面向对象(OOP)的编程思想,也可能听说过 AOP ( Aspect Orient Programming ,面向切面编程)的编程思想。

设计模式:观察者模式

2020-01-08
阅读 6 分钟
1.5k
观察者模式最常用的地方是GUI系统、订阅-发布系统。因为这个模式的一个重要的作用就是解耦,将被观察者和观察者解耦,使得他们之间的依赖性更小,甚至做到毫无依赖。

HTTPS(含SNI)业务场景“IP直连”方案说明

2020-01-07
阅读 8 分钟
5.4k
本文主要介绍HTTPS(含SNI)业务场景下在Android端实现“IP直连”的通用解决方案。如果以OkHttp作为网络开发框架,由于OkHttp提供了自定义DNS服务接口可以优雅地实现IP直连。其方案相比通用方案更加简单且通用性更强,推荐您参考HttpDns+OkHttp最佳实践接入HttpDns。

HttpDns+OkHttp最佳实践

2020-01-07
阅读 3 分钟
7.9k
目前大多数Android端使用的网络框架是OkHttp,通过调用OkHttp提供的自定义Dns服务接口,可以更为优雅地使用HttpDns的服务。

Android Webview + HttpDns最佳实践

2020-01-07
阅读 11 分钟
6.5k
Android WebView场景下接入HttpDns的参考方案,提供的相关代码也为参考代码,非线上生产环境正式代码。由于Android生态碎片化严重,各厂商也进行了不同程度的定制,建议您灰度接入,并监控线上异常。

设计模式: 策略模式

2020-01-03
阅读 11 分钟
1.6k
博客主页 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。 使用场景: 针对同一类型问题的多种处理方式,仅仅是具体行为有差别时 需要安全地封装多种同一类型的操作时 出现同一抽象类有多个子类,而又需要使用if-else或者switch-ca...

HTTP协议 & DNS协议

2019-12-26
阅读 5 分钟
3.9k
博客主页 [链接] 是个URL,叫作统一资源定位符。HTTP称为协议,restapi.amap.com是一个域名,表示互联网上的一个位置。 HTTP版本区别 HTTP/0.9 只支持get请求 HTTP/1.0 增加版本号,请求头,MIME,代理连接 HTTP/1.1 默认持久连接,支持缓存,执行管道方式发送多个请求 HTTP请求的准备 浏览器会将restapi.amap.com这个域...

设计模式:单例模式

2019-12-24
阅读 18 分钟
2.2k
博客主页 介绍:单例对象的类必须保证只有一个实例存在 定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 使用场景:确保某个类有且只有一个对象的场景,避免产生多个对象消耗过多的资源,或者某种类型的对象只应该有且只有一个。 实现单例模式的几个关键点: 构造函数不对外开发,一般为priv...

设计模式:责任链模式

2019-12-20
阅读 15 分钟
1.2k
定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。

设计模式:Builder模式

2019-12-20
阅读 21 分钟
1.9k
博客主页 介绍:该模式是为了将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示隔离开来。 定义:将一个复杂的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 使用场景: 相同的方法,不同的执行顺序,产生不同的事件结果时。 多个部件或者零件,都可以装配到一个对象中,但是产生的运行结果...

设计模式:代理模式

2019-12-19
阅读 10 分钟
1.7k
使用场景:当无法或者不想直接访问某个对象或者访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象与代理对象需要实现相同的接口。

代理模式和IOC架构设计之事件注入

2019-12-18
阅读 7 分钟
1.5k
博客主页 这篇文章讲解了编译时注入,但运行时注入框架也值得学习。 结下来的任务是分析xUtils3核心模块IOC注入式的框架设计,注解解决事件的三要素,静态代理和动态代理,运行时注入布局,控件,事件 运行时注入布局 在Activity中加载布局文件一般都是通过在onCreate方法中调用setContentView方法设置布局 {代码...} 如...

ButterKnife框架设计原理分析

2019-12-17
阅读 12 分钟
3.4k
ButterKnife(黄油刀)是控件注入框架,可以帮助安卓开发者省去初始化控件的重复性工作,简单快捷的初始化布局文件中的控件,极大的提升开发效率。

组件化的架构设计(二):路由架构设计及编码实现

2019-12-13
阅读 17 分钟
2.2k
博客主页 组件化路由架构设计思路 上一篇中讲解了类加载、全局Map记录实现组件化模块之间的交互,慢慢衍生APT技术。 那么在组件化架构中,我们需要思考通过APT+javapoet技术生成什么样的类文件呢? 从组件化路由架构设计图需要思考,使用APT生成文件为什么需要分组? 生成这些文件干什么用? 设计思路:在初始化只加载分...

Kotlin核心语法(八):注解与反射

2019-12-10
阅读 13 分钟
7.2k
如果使用了 remove 函数, IDEA 不仅会提示应该使用哪个函数来代替它(这个例子中是 removeAt), 还会提供一个自动的快速修正。

Kotlin核心语法(七):泛型

2019-12-07
阅读 8 分钟
5.6k
博客主页 1. 泛型类型参数 1.1 泛型函数和属性 在使用集合的库函数都是泛型的。我们来看下slice函数的定义: {代码...} 在一个具体的列表上调用这个函数时,可以显式地指定类型实参,但大部分情况下不必这样做,因为编译器会推导出类型。 {代码...} 先来看下filter函数的声明,它接收一个函数类型:(T) -> Boolean的...

Kotlin核心语法(六):高阶函数,Lambda作为形参和返回值

2019-12-06
阅读 10 分钟
6.5k
高阶函数就是以另一个函数作为参数或者返回值的函数。在kotlin中,函数可以用lambda或函数引用来表示。例如:标准库中的filter函数将一个判断式函数作为参数,所以就是一个高阶函数

组件化的架构设计(一):gradle组件化配置、APT+javapoet介绍和使用

2019-12-03
阅读 22 分钟
6.7k
Android组件化开发的配置,离不开gradle构建工具,它的出现让工程有无限的可能。gradle核心是基于groovy脚本语言,groovy脚本基于java且扩展了java,所以gradle需要依赖JDK和Groovy库。