Flex中Hook機(jī)制的示例分析

小編給大家分享一下Flex中Hook機(jī)制的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

成都創(chuàng)新互聯(lián)公司專注于新沂企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,電子商務(wù)商城網(wǎng)站建設(shè)。新沂網(wǎng)站建設(shè)公司,為新沂等地區(qū)提供建站服務(wù)。全流程按需策劃設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

在前一篇簡(jiǎn)要介紹了基于Flex的界面組合SDK,其中使用Hook機(jī)制實(shí)現(xiàn)UI Part生命周期管理、Master-Details關(guān)系構(gòu)建和UI Part注入。Hook即鉤子,其作用可以理解為通過(guò)透明的方式為某一對(duì)象掛上額外的功能,從而實(shí)現(xiàn)透明擴(kuò)展。Hook機(jī)制可以應(yīng)用于各種平臺(tái),不限語(yǔ)言,其傳遞的是一種思想。利用Hook機(jī)制實(shí)現(xiàn)這些功能的***優(yōu)點(diǎn)是,在提供這些功能的同時(shí)不增加用戶復(fù)雜性,它能夠完全兼容基于Flex組件的設(shè)計(jì),使用戶絲毫感覺(jué)不出來(lái)我們正在使用SDK。也就是說(shuō),這種Hook機(jī)制的引入,該SDK提供的功能對(duì)開(kāi)發(fā)人員是完全透明的,這個(gè)想法很酷。不過(guò),沒(méi)有任何解決方案是***的,這種Hook機(jī)制在資源釋放、事件捕捉時(shí),需要按一定順序,控制這些順序?qū)DK維護(hù)人員要求比較高,一不注意,就會(huì)出現(xiàn)莫名其妙的錯(cuò)誤。此外,Hook機(jī)制實(shí)現(xiàn)稍微困難一點(diǎn)。

下圖是Hook機(jī)制實(shí)現(xiàn)類圖。

Flex中Hook機(jī)制的示例分析

IDisposable接口借鑒與微軟內(nèi)存管理模型,Adobe Flex在內(nèi)存管理和GC方面做得非常粗糙,其SDK內(nèi)存泄漏很多,在模塊化應(yīng)用中,內(nèi)存泄漏尤其嚴(yán)重。因此,我在設(shè)計(jì)該SDK的時(shí)候,引入了微軟的一些 內(nèi)存管理思路,不過(guò),根據(jù)需要做了一點(diǎn)變化。該SDK內(nèi)存釋放分為2個(gè)階段,***個(gè)階段有predispose函數(shù)實(shí)現(xiàn),用于釋放類實(shí)例間依賴,第二階段 是postDispose函數(shù)實(shí)現(xiàn),用于釋放實(shí)例引用。所有的Hook都實(shí)現(xiàn)了IDisposable接口,可以實(shí)現(xiàn)內(nèi)存釋放。

IComponentHook 繼承于IDisposable接口,定義了一個(gè)Hook的基本接口,由compositionManager、component、isHooked屬性 和hook、unHook方法組成,分別用于表示組合管理器、Hook掛載的組件、是否掛載和執(zhí)行掛載、執(zhí)行卸載。

ComponentHook是所有Hook基類,它直接實(shí)現(xiàn)了compositionManager、component、isHooked屬性的定義,并且在hook方法和unHook方法中設(shè)置了掛載的組件和isHooked屬性。

生命周期管理功能由IComponentLifecycleHook、IContainerLifecycleHook接口與 ComponentLifecycleHook、ContainerLifecycleHook、ViewStackLifecycleHook實(shí)現(xiàn)類組成。ComponentLifecycleHook用于保存一個(gè)葉子控件的生命周期狀態(tài),葉子控件的生命周期是由其容器決定的;ContainerLifecycleHook用于保存容器的生命周期狀態(tài),同時(shí)用于管理子控件的狀態(tài),默認(rèn)的,所有的子控件都與容器的狀態(tài)是一致;ViewStack是一個(gè)特殊的容器,在任一時(shí)刻,它只顯示一個(gè)子控件,ViewStackLifecycleHook用于保存ViewStack容器的狀態(tài),并管理當(dāng)前顯示的控件的狀態(tài),當(dāng)ViewStack狀態(tài)更改時(shí),只更改當(dāng)前被選中的子控件,而其它子控件都處于非激活狀態(tài)。

SmartPartPlaceHolderHook和SmartPartContainerHook實(shí)現(xiàn)UI Part動(dòng)態(tài)注入(在SDK中,每一個(gè)UI Part被命名為SmartPart,命名方式來(lái)源于微軟CAB)。這兩個(gè)Hook會(huì)為實(shí)現(xiàn)ISmartPartPlaceHolder和ISmartPartContainer接口的容器,從這類容器讀取location屬性,然后根據(jù)location屬性從SmartPartManager獲取相應(yīng)的SmartPart,然后注入到這些容器中。SmartPartPlaceHolder與SmartPartContainer區(qū)別是,前者只能注入一個(gè)SmartPart,而后者可以注入多個(gè)SmartPart。

DetailsSmartPartHook實(shí)現(xiàn)Master-Details關(guān)系構(gòu)建,為一個(gè)實(shí)現(xiàn)IDetailsSmartPart接口的組件添加其masterSmartPartLocations對(duì)應(yīng)的MasterSmartPart,建立二者之間的關(guān)系,這種關(guān)系的建立對(duì)于用于是透明的。

ComponentTreeHook是Hook機(jī)制核心類,掛載到控件樹(shù)的根節(jié)點(diǎn),動(dòng)態(tài)監(jiān)聽(tīng)整個(gè)控件樹(shù)onChildAdded/Removed事件,實(shí)現(xiàn)整個(gè)控件樹(shù)的所有Hook的創(chuàng)建和銷毀;DebugComponentTreeHook繼承于ComponentTreeHook,與其區(qū)別在于它是實(shí)現(xiàn)整個(gè)控件樹(shù)調(diào)試信息的收集,其收集的調(diào)試信息能夠自動(dòng)顯示到如下的DebugPanel。

Flex中Hook機(jī)制的示例分析

看完了這篇文章,相信你對(duì)“Flex中Hook機(jī)制的示例分析”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

當(dāng)前題目:Flex中Hook機(jī)制的示例分析
路徑分享:http://bm7419.com/article14/gippge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、企業(yè)網(wǎng)站制作、網(wǎng)站策劃、虛擬主機(jī)、企業(yè)建站、網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開(kāi)發(fā)