2012-03-03 63 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或类似的东西中执行。