鍍金池/ 教程/ Android/ Custom observables
Custom observables
Compiled functions
Reactive programming
Reservoirs and parallelism
Incrementally Agerifying legacy code
Observables and updatables
Compiled repositories
Repositories

Custom observables

Agera 可以按需自定義observable。

Proxy observables(代理被觀察者)

代理被觀察者是簡單的代其他被觀察者分發通知事件,幾乎不做處理。工具類(Observables)提供了如下創建代理被觀察者的方法:

  • compositeObservable: 組合多觀察(事件)源;
  • conditionalObservable: 通過被觀察者設置的條件來控制事件通知;
  • perMillisecondObservable and perLoopObservable: 限制事件通知頻率。

BaseObservable

基類BaseObservable實現了注冊、注銷觀察者和通知給[[threading contract|Observables-and-updatables#threading]]。 繼承BaseObservable是創建一個自定義被觀察者的最簡單的方法。 在任何線程,當要發送事件通知的時候,子類只需要調用dispatchUpdate()方法。 舉個例子,下面的類將View的點擊事件實現為被觀察者:

public class ViewClickedObservable extends BaseObservable
    implements View.OnClickListener {

  @Override
  public void onClick(View v) {
    dispatchUpdate();
  }
}

BaseObservable的子類可以重寫observableActivated()observableDeactivated()方法,可以監測被觀察者的激活周期,分別在激活和去激活的時候調用。

這兩個方法是在BaseObservable的線程上調用的-- 也就是實例化BaseObservable的線程。

這減輕任何同步鎖在最典型的情況下的需要,使用main Looper作為所有被觀察者的worker Looper。

UpdateDispatcher

當不能或者不方便繼承BaseObservable的時候(比如:已經繼承一個基類),也可以很容易的實現自定義被觀察者,直接實現Observable接口。

UpdateDispatcher實例(更新事件分發器)幫助自定義的被觀察者管理客戶端更新事件(和繼承BaseObservable一樣), 具有相同的線程規則。

自定義的被觀察者應該創建一個私有更新分發器調用Observables.updateDispatcher(),或者接受ActivationHandler實例。

ActivationHandler定義了observableActivatedobservableDeactivated方法,可以監測被觀察者的激活周期。 像BaseObservable一樣,更新分發器需要有Looper的線程上工作,所以需要在有Looper的線程上創建。

自定義的被觀察者應該簡單地轉發所有的注冊和注銷觀察者調用來更新。要向所有觀察者發送事件調用UpdateDispatcher.update()。 名符其實,更新分發器可以方便更新,所以自定義的被觀察者自己就是一個代理,需要注冊一個內部觀察者到其他事件源,可以簡單地使用它的更新分發。

這熟悉的名字意味著更新調度是方便可更新的,因此如果自定義觀察到的是自己觀察到的一個代理,需要注冊一個內部更新到其他事件源,它可以簡單地使用它的更新調度。

一個額外的提示點, UpdateDispatcher也是Observable的一個子類型,也可以作為被觀察者使用。就像可變repository作為數據生產者和消費者的橋梁,UpdateDispatcher作為事件生產者和消費者的橋梁。

數據生產者使用Receiver作為MutableRepository提供數據方, 數據消費者使用Repository作為數據消費方。

同樣, 事件生產者使用Updatable作為UpdateDispatcher發送事件方, 事件消費者使用Observable作為事件消費方。

极品美女高潮白浆免费视频在线观看