从CallBack运行Timer时没有调用Looper.prepare()

时间:2012-06-11 18:47:24

标签: java android

我在这段代码中我循环访问对象的attaylist并为每个对象分配回调,但是当我使用CountDownTimer时,它崩溃了无法在未调用的线程内创建处理程序Looper.prepare()

    for ( final ABoxActor a : actList )
    {

        ActorDamageListener adl = new ActorDamageListener(){
            public void ActorDestroyCallback() {
                Log.e("KILLED", a.getBitmapName() );
            }

            public void ActorDamageCallback(float damage) {
                Log.e("DAMAGED "+String.valueOf(damage), a.getBitmapName() );
                a.setSpriteCurrentFrame(10);

                //// THROWS Can't create handler inside thread that has not called Looper.prepare()
                CountDownTimer t = new CountDownTimer(500,500){
                    @Override
                    public void onFinish() {
                        a.setSpriteCurrentFrame(15);
                    }
                    @Override
                    public void onTick(long millisUntilFinished) {
                    }}.start();
                /////////////////////////////////       

            }
        };

        a.setListener(adl); 
    }

任何想法最简单的方法是什么?我可以以某种方式将这个“looper”添加到我的回调定义中吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

您可能正在自己的线程中调用此代码。每个thead都需要附加一个Looper才能让处理程序回调到ui线程。因此,您必须调用Looper.prepare()来设置looper,以便处理程序可以回调您的ui线程。