新聞中心
下面介紹的是Flex中的Hook機制。這個Hook機制本身不限平臺和語言,而Flex中的Hook機制是相當(dāng)不錯的。

在前一篇簡要介紹了基于Flex的界面組合SDK,其中使用Hook機制實現(xiàn)UI Part生命周期管理、Master-Details關(guān)系構(gòu)建和UI Part注入。Hook即鉤子,其作用可以理解為通過透明的方式為某一對象掛上額外的功能,從而實現(xiàn)透明擴展。Hook機制可以應(yīng)用于各種平臺,不限語言,其傳遞的是一種思想。利用Hook機制實現(xiàn)這些功能的***優(yōu)點是,在提供這些功能的同時不增加用戶復(fù)雜性,它能夠完全兼容基于Flex組件的設(shè)計,使用戶絲毫感覺不出來我們正在使用SDK。也就是說,這種Hook機制的引入,該SDK提供的功能對開發(fā)人員是完全透明的,這個想法很酷。不過,沒有任何解決方案是***的,這種Hook機制在資源釋放、事件捕捉時,需要按一定順序,控制這些順序?qū)DK維護人員要求比較高,一不注意,就會出現(xiàn)莫名其妙的錯誤。此外,Hook機制實現(xiàn)稍微困難一點。
下圖是Hook機制實現(xiàn)類圖。
IDisposable接口借鑒與微軟內(nèi)存管理模型,Adobe Flex在內(nèi)存管理和GC方面做得非常粗糙,其SDK內(nèi)存泄漏很多,在模塊化應(yīng)用中,內(nèi)存泄漏尤其嚴重。因此,我在設(shè)計該SDK的時候,引入了微軟的一些 內(nèi)存管理思路,不過,根據(jù)需要做了一點變化。該SDK內(nèi)存釋放分為2個階段,***個階段有preDispose函數(shù)實現(xiàn),用于釋放類實例間依賴,第二階段 是postDispose函數(shù)實現(xiàn),用于釋放實例引用。所有的Hook都實現(xiàn)了IDisposable接口,可以實現(xiàn)內(nèi)存釋放。
IComponentHook 繼承于IDisposable接口,定義了一個Hook的基本接口,由compositionManager、component、isHooked屬性 和hook、unHook方法組成,分別用于表示組合管理器、Hook掛載的組件、是否掛載和執(zhí)行掛載、執(zhí)行卸載。
ComponentHook是所有Hook基類,它直接實現(xiàn)了compositionManager、component、isHooked屬性的定義,并且在hook方法和unHook方法中設(shè)置了掛載的組件和isHooked屬性。
生命周期管理功能由IComponentLifecycleHook、IContainerLifecycleHook接口與 ComponentLifecycleHook、ContainerLifecycleHook、ViewStackLifecycleHook實現(xiàn)類組成。ComponentLifecycleHook用于保存一個葉子控件的生命周期狀態(tài),葉子控件的生命周期是由其容器決定的;ContainerLifecycleHook用于保存容器的生命周期狀態(tài),同時用于管理子控件的狀態(tài),默認的,所有的子控件都與容器的狀態(tài)是一致;ViewStack是一個特殊的容器,在任一時刻,它只顯示一個子控件,ViewStackLifecycleHook用于保存ViewStack容器的狀態(tài),并管理當(dāng)前顯示的控件的狀態(tài),當(dāng)ViewStack狀態(tài)更改時,只更改當(dāng)前被選中的子控件,而其它子控件都處于非激活狀態(tài)。
SmartPartPlaceHolderHook和SmartPartContainerHook實現(xiàn)UI Part動態(tài)注入(在SDK中,每一個UI Part被命名為SmartPart,命名方式來源于微軟CAB)。這兩個Hook會為實現(xiàn)ISmartPartPlaceHolder和ISmartPartContainer接口的容器,從這類容器讀取location屬性,然后根據(jù)location屬性從SmartPartManager獲取相應(yīng)的SmartPart,然后注入到這些容器中。SmartPartPlaceHolder與SmartPartContainer區(qū)別是,前者只能注入一個SmartPart,而后者可以注入多個SmartPart。
DetailsSmartPartHook實現(xiàn)Master-Details關(guān)系構(gòu)建,為一個實現(xiàn)IDetailsSmartPart接口的組件添加其masterSmartPartLocations對應(yīng)的MasterSmartPart,建立二者之間的關(guān)系,這種關(guān)系的建立對于用于是透明的。
ComponentTreeHook是Hook機制核心類,掛載到控件樹的根節(jié)點,動態(tài)監(jiān)聽整個控件樹onChildAdded/Removed事件,實現(xiàn)整個控件樹的所有Hook的創(chuàng)建和銷毀;DebugComponentTreeHook繼承于ComponentTreeHook,與其區(qū)別在于它是實現(xiàn)整個控件樹調(diào)試信息的收集,其收集的調(diào)試信息能夠自動顯示到如下的DebugPanel。
【編輯推薦】
- Flex for eclipse插件的安裝步驟
- 淺析基于Flex界面的組合SDK
- 訪問權(quán)限的比較:C#與Flex
- 使用 Flex SDK、Mate 和 PHP
- 技術(shù)角度論Flex與Silverlight優(yōu)劣
名稱欄目:Hook機制與Flex的界面組合SDK
網(wǎng)站網(wǎng)址:http://m.fisionsoft.com.cn/article/djiegsc.html


咨詢
建站咨詢
