獲取Flex SDK載入進度的方法

2022-04-30 17:45:10 字數 1906 閱讀 8626

用flex做的專案往往會把sdk設為rsl(執行時共享庫)的方式載入,因為這樣可以減小檔案體積,縮短載入的時間。

但是會碰到另外乙個問題,載入sdk需要很長時間,並且flex沒有提供sdk載入進度的方法。這樣就會造成程式寫載入

進度條的時候不能把載入sdk的進度也算進去,造成載入進度不準確,程式已經載入完了,但是還需要等待sdk載入完

才能進入主介面,會導致部分使用者流失。

由於這個問題對專案影響較大,所以必須找到解決辦法。於是這段時間我對這個問題做了深入的研究。

其實也不算怎麼深入了,就是對flex開始loading到初始化的這段過程分析下。

有乙個不爭的事實我們必須知道,下面是adobe幫助文件的原話:

所以我們必須從systemmanager入手,還好flex是開源的,提供systemmanager的原始碼。

開啟systemmanager類:

在建構函式裡我們可以發現root.loaderinfo.addeventlistener(event.init, inithandler);

,說明監聽了loaderinfo的init事件;

在inithandler

裡面我們可以找到

initialize();

,說明在這裡進行了初始化;

在initialize裡面我們可以找到preloader = new preloader();,

說明開始建立preloader物件,終於知道preloader在哪初始化了。

開啟preloader類:

可以找到mx_internal function rslprogresshandler(event:progressevent):void和mx_internal function rslcompletehandler(event:event):void

這兩個就是rsl的progress和complete事件,然後我們發現這兩個函式裡面都有dispatchevent(rslevent);

這句話。說明這兩個事件是可以被preloader

的例項接收到的,這樣的話,我們只要找到了preloader的例項就可以監聽到rsl的載入進度和載入完成事件了。

回到systemmanager類:

我們已經知道preloader在哪初始化了,下面只要在loader的時候能訪問到preloader就大功告成了。

在initialize裡面

我們可以找到_popupchildren.addchild(preloader);,說明在popupchildren裡面可以找到preloader。

我們知道systemmanager有popupchildren的get方法。說明popupchildren是可以獲取到的,這樣我們順藤摸瓜已經找到解決辦法了。

最後在加上一句systemmanager怎麼獲取呢?  很簡單當swf被loader載入的時候,loader的content屬性就是個systemmanager物件。

下面附上我寫的一段**,以備需要的時候直接過來取:

var loadera:loader;

loadera.load(new urlrequest("a.swf"), null);

loadera.contentloaderinfo.addeventlistener(event.init, oninit);

loadera.contentloaderinfo.addeventlistener(event.complete, onswfloaded);

function oninit(e:event):void

function onenterframe(e:event):void

}function onloadingandloaded(e:event):void

完!

獲取載入素材的進度

問題 要載入一批素材,希望實時顯示素材的載入進度。解決方案 1.序列載入,總進度是素材數量,總進度條按照素材數量等分n份,進度是已載入完成的素材數量。這種按照素材個數等分的進度管理方式最簡單,能大概顯示進度資訊。每乙個素材載入完成進度向前走一步。缺點是進度條是跳躍顯示,而且大素材和小素材載入時間不一...

iPhone OpenGL ES載入紋理的方法

載入一張名為xiezi.png的紋理 void loadtexture nsinteger texwidth cgimagegetwidth textureimage nsinteger texheight cgimagegetheight textureimage glubyte textured...

靜態資源載入的進度條

最近做專案遇到乙個比較大的資源需要載入 這裡就需要做乙個靜態資源載入器 載入資源的時候顯示進度條 npm install web uts import from web uts const loader new loader onprogress function current,total onc...