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)判断)后产生事件。
本质上说,静态源将永远提供最新数据,不论它们是否被激活。

复杂源...

继续阅读

Agera官方Wiki翻译(三)——被观察者和 updatables

正如前文Agera官方Wiki翻译(二)——响应式编程所述,被观察者(observable)表示事件源,updatable 观察这些事件。updatable 使用Observable.addUpdatable(Updatable)注册对被观察者(observable)的观察,使用Observable.removeUpdatable(Updatable)解除注册。事件以Updatable.update()的形式被分发到 updatable。Activity 可以通过如下方式观察来自被观察者(observable)的事件:
// Activity 实现 Updatable,说明它要响应事件public class MyUpdatableActivity extends Activity implements Updatable {// 事件源private Observable observable;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);observable = new MyObservable();}@Overridepublic void update() {// Act on the event// 有事件发生时就会调用 update}@Overrideprotected void onResume() {super.onResume();// 生命周期调整observable.addUpdatable(this);update();}@Overrideprotected void onPause() {super.onPause();// 生命周期调整observable.removeUpdatable(this);}}
Updatable 的注册与取消注册必须成对使用。多次注册同一个 updatable 是非法操作,对未注册的 updatable 取消注册也是非法操作,多次取消 updatable 也属于非法操作,诸如此类。

活动生命周期和事件链

被观察者(observable)通过被观察(至少被一个 updatable 注册)这一行为变为活动状态,通过被取消观察(没有被任何 updatables 注册)变为不活动状...

继续阅读

Agera官方Wiki翻译(二)——响应式编程

Agera 是一种响应式编程范式,它背后的驱动机制是著名的观察者模式。被观察者(observable使用接口Observable来表示,它负责向所有注册过的观察者(observers广播事件。观察者(observers使用接口Updatable来表示,可以被注册到Observable上,也可以从它上面取消注册,当事件到来的时候进行更新操作,Updatable即因此得名。本 wiki 的剩下部分中,讲observabl...

继续阅读