<wbr id="jl7f7"></wbr>

        <i id="jl7f7"></i>
          <acronym id="jl7f7"></acronym>

          <s id="jl7f7"></s>

          <ins id="jl7f7"></ins><button id="jl7f7"><strong id="jl7f7"></strong></button>
          鍍金池/ 教程/ 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(代理被觀(guān)察者)

          代理被觀(guān)察者是簡(jiǎn)單的代其他被觀(guān)察者分發(fā)通知事件,幾乎不做處理。工具類(lèi)(Observables)提供了如下創(chuàng )建代理被觀(guān)察者的方法:

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

          BaseObservable

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

          public class ViewClickedObservable extends BaseObservable
              implements View.OnClickListener {
          
            @Override
            public void onClick(View v) {
              dispatchUpdate();
            }
          }

          BaseObservable的子類(lèi)可以重寫(xiě)observableActivated()observableDeactivated()方法,可以監測被觀(guān)察者的激活周期,分別在激活和去激活的時(shí)候調用。

          這兩個(gè)方法是在BaseObservable的線(xiàn)程上調用的-- 也就是實(shí)例化BaseObservable的線(xiàn)程。

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

          UpdateDispatcher

          當不能或者不方便繼承BaseObservable的時(shí)候(比如:已經(jīng)繼承一個(gè)基類(lèi)),也可以很容易的實(shí)現自定義被觀(guān)察者,直接實(shí)現Observable接口。

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

          自定義的被觀(guān)察者應該創(chuàng )建一個(gè)私有更新分發(fā)器調用Observables.updateDispatcher(),或者接受ActivationHandler實(shí)例。

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

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

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

          一個(gè)額外的提示點(diǎn), UpdateDispatcher也是Observable的一個(gè)子類(lèi)型,也可以作為被觀(guān)察者使用。就像可變r(jià)epository作為數據生產(chǎn)者和消費者的橋梁,UpdateDispatcher作為事件生產(chǎn)者和消費者的橋梁。

          數據生產(chǎn)者使用Receiver作為MutableRepository提供數據方, 數據消費者使用Repository作為數據消費方。

          同樣, 事件生產(chǎn)者使用Updatable作為UpdateDispatcher發(fā)送事件方, 事件消費者使用Observable作為事件消費方。

          日韩性做爰免费a片aa片,天天躁恨恨躁夜躁2020,精品久久综合1区2区3区激情,精产国品一二三产品麻豆

          <wbr id="jl7f7"></wbr>

                <i id="jl7f7"></i>
                  <acronym id="jl7f7"></acronym>

                  <s id="jl7f7"></s>

                  <ins id="jl7f7"></ins><button id="jl7f7"><strong id="jl7f7"></strong></button>