Maxiee 的 RxJava 学习指南 (4) - RxBinding

介绍

从这一篇我们开始对RxBinding 库的学习, 主要学习它对按钮的封装, 以及它内部的实现原理.对于RxBinding 库的使用, 网上已经有许多优秀的教程了. 我简单地梳理了一下:
文章介绍
使用RxBinding响应控件的异步事件以一个 Demo 示例来讲解, RxToolbar, RxSnackba
RxBinding 学习笔记基本用法, 点击, ListView 点击事件, 结合使用操作符
RxBinding(JakeWharton/RxBinding)实例: 验证过滤, 流量控制
RxJava RxBinding基础按钮...

继续阅读

Looper

这个类用于为线程运行一个消息循环. 默认上, 线程是没有与之绑定的消息循环的. 为了创建一个消息循环, 在线程中调用 prepare 方法来创建一个循环, 之后调用 loop 方法启动循环, 开始处理...

继续阅读

Matrix 类学习 (一)

Matrix 类学习 (一

网上讲 Matrix 的文章很多, 但是 "纸上得来终觉浅", 要真想弄懂, 就要去看代码. 代码看明白了你也能写出来那种牛逼哄哄的文章.

乱七八糟的方法

isAffine(

判断是不是仿射....

继续阅读

Agera官方Wiki翻译(五)——已编译源

复杂源(complex repository)可以使用一个表达式编译(compiled)表示。表达式包含如下部分
  1. Repositories.repositoryWithInitialValue(...);
  2. 事件源.observe(...)
  3. 响应频率.onUpdatesPer(...)or.onUpdatesPerLoop()
  4. 数据流程.getFrom(...),.mergeIn(...),.transform(...), etc.;
  5. 杂项设置.notifyIf(...),.onDeactivation(...), etc.;
  6. .compile().
当已编译源被激活,它会将自己内部的 updatable 注册到给定事件源,并启动数据处理流程来计算初始值。当从事件源收到事件的时候,这个流程再次启动。表达式的第一步分指定的值,是在初始值尚未被计算出来时的取值。当数据更新完成时,源的客户会被通知。当源不活动,内部 updatable 会从事件源取消注册,数据处理流程不在执行,因此对外暴露的值可能会过时。一旦重新激活,这个值又会再次保持最新。表达式的不同阶段通过RepositoryCompilerStates内嵌的编译器状态接口(compiler state interfaces)来表示,这样在每个阶段只暴露合适的方法,来引导开发者正确的完成表达式(当使用 IDE 的自动补全特性)。方法的完整文档可以在这些接口中找到;特别是每个部分:
  • 事件源和响应频率RFrequency和它的父接口REventSource
  • 数据处理流程RFlow和它的父接口RSyncFlow
  • 其他设置RConfig
源编译表达式不允许从中间断开,来将中间结果存到本地变量或者 cast 到另一个接口。这些方法都是不支持的。编译一个源会有一点麻烦,但是之后的操作就简单了。repository 最适合与高级组件的生命周期进行绑定,例如 Activity、可重用的视图或者一个为整个 APP 服务的全局单例。通过源的编译操作就能实现(编译实在运行时发生的)。

何时、何处、何物...

继续阅读

Agera官方Wiki翻译(四)——源

正如之前Agera官方Wiki翻译(二)——响应式编程所述,源(Repository)是一个提供数据并定义在所提供数据发生变化时的事件的被观察者。

简单源

一个简单源可以使用Repositories类中的工具方法来进行创建。可以有如下选择:
  • 静态源(static repository)提供同样的值,并且不会产生任何事件;
  • 可变源(mutable repository)允许改变值,并且当值被更新成新值(通过Object.equals(Object)判断)后产生事件。
本质上说,静态源将永远提供最新数据,不论它们是否被激活。

复杂源...

继续阅读