2012-03-03 64 views
0

我試圖用andengine構建我的第一個項目。事情工作得很好,但我有一個線程模型的問題。 據我所知,計算應該在更新線程中完成,以防止ui凍結。 所以爲了確保我的計算確實發生在updatethread中,我使用for-loop做了一個模擬方法來檢查屏幕是否凍結,不幸的是它確實發生了。所以這是我的測試代碼:andengine:在updatethread中調用凍結UI線程/動畫

我這是怎麼初始化的情景:

private void init() { 
     engine.registerUpdateHandler(new IUpdateHandler() { 

     @Override 
     public void onUpdate(final float pSecondsElapsed) { 
      gamemodel.test(); 
     } 

     @Override 
     public void reset() { 
     } 

    }); 

gamemodel是從這個類的對象:

public class Game { 

    public void test() { 
     for(int i=0;i<100000000;++i) { 
     } 
    } 

} 

我也試着撥打測試方法在engine.runOnUpdateThread內,但它也不起作用。

我會除了場景中的動畫(animatedsprites)不會凍結,因爲測試方法沒有在UI線程中調用。那麼這裏發生了什麼,解決方案是什麼?

回答

1

因爲我自己發現註冊updatehandler只是意味着更新處理程序在andengine的update-method的下一個調用中運行。 如果你想異步運行一個方法,你必須在asynctask或類似的東西中執行。