2012-12-08 54 views
0

我正面臨以下問題: - 在加載應用程序期間計算出的複雜數學計算結果是,計算時間相當長(大約20秒),在這段時間內,CPU的使用幾乎達到了100%並且該應用程序看起來像被凍結了。 由於它是一個移動應用程序,即使延長了初始加載時間的成本,也必須防止這種情況發生,但由於它位於第三方庫內部,因此無法直接訪問計算代碼。在AIR移動應用程序上長時間計算時減少CPU負載?

  • 有沒有辦法一般阻止​​AIR應用程序的大部分CPU?
+2

csomakk給出了一個可以工作的答案,如果您需要立即使用UI,但是如果您在用戶能夠智能地使用應用程序之前完成計算,那麼您是否考慮過可能顯示圖像的「加載」狀態或在屏幕上顯示信息「正在計算所有事情以便開始使用......根據您的設備,這可能需要長達20秒」。 –

回答

3

在桌面上,您可以使用Workers API。它非常新穎,我推薦它僅用於AS3項目。如果你使用flex,最好等幾個月。 Workers是一個多線程API,允許你創建一個UI和一個工作線程。這將仍然使用100%的CPU,但用戶界面不會卡住。這裏有一些鏈接,讓你開始: Thibault Imbert - sneak peekIntro to as 3 workersAS3 Workers livedocs

然而,在移動,則不能使用工人,所以你不得不分開你的功能,並在那裏插入一些延遲,如callLater或setTimeout。很難編寫這樣的函數,但如果它有一個循環,則可以在每次迭代後插入一個callLater方法。您可以參數化x和callLater函數的延遲以實現完美的解決方案。在callLater被調用後,UI將被渲染,事件將被生成並捕獲。如果您不需要它們,請移除其偵聽器,或使用更高優先級的處理程序停止它們的傳播。如果您需要,我可以在循環中發佈一些callLater的源代碼示例。

+0

這是一個有趣的選擇,但我正在尋找更通用的解決方案,儘可能減少cpu負載。 :| –

+0

你仍然可以實現椋鳥,無論是光禿禿的stage3D .. – csomakk

+0

他們可以做什麼用cpu加載純數學計算? –