flex的失效機制

一、什麼是失效機制:

        Flex 使用“失效機制(invalidation mechanism)”來同步組件的更改。Flex 用一系列方法的調用,比如在setter方法內監控一個變更變量來標記組件的某些東西已經發生變化, 然後在下一個“渲染事件(renderevent)” 中觸發組件的commitProperties(), measure(), layoutChrome(),updateDisplayList()檢查這些布爾變量來完成最終的變更邏輯。這樣做的額外好處就是setter方法可以更迅速地返回,把對新屬性值的處理留給了commitProperties()方法。

  二、爲什麼使用失效機制:

      一種情況是,當設置了組件的多個屬性後,比如Button 控件的label 和icon 屬性,我們需要所有屬性被設置後一次性執行commitProperties(), measure(), updateDisplayList()方法,而不是設置過label 屬性後執行一遍這些方法,然後在設置icon屬性後又執行一次這些方法。

另一種情況是幾個組件同時更改了它們的字體大小。程序更改字體大小的執行速度大大快於Flex 更新應用的速度,因此要在確定最終更改字體之後纔開始更新佈局。另外,Flex 需要協調佈局操作以消除任何冗餘過程,而不是在每個組件更新它的字體大小之後都執行一次佈局操作。

  三、失效方法的聯繫:

       失效方法及其對應的觸發函數如下:
      1. invalidateProperties() 通知組件,以使下次屏幕更新時,它的commitProperties()方法被調用。

      2. invalidateSize() 通知組件,以使下次屏幕更新時,它的measure()方法被調用。

      3. invalidateDisplayList() 通知組件,以使下次屏幕更新時它的layoutChrome()方法和updateDisplayList()方法能被調用。

      當組件調用一個“失效”方法時,它就通知Flex該組件已經被更新。當多個組件調用失效
     方法,Flex 會在schedules中協調這些更新,以使這些更新操作在下一次屏幕更新時一起執行。注意,createChildren()沒有對應的失效方法,它會在調用後被立即執行。

  四、循環週期中我們可以遵循以下的規則

    1.如果屬性需要改變子組件的一個屬性時,調用invalidateProperties()同時重寫commitProperties()方法。

    2.如果屬性需要改變當前組件上的一些可見的內容時,調用invalidateDisplayList()方法同時重寫 updateDisplayList()方法。

    3.如果屬性影響了組件的大小,調用invalidateSize()方法並重寫measure()方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章