Android 从另一个Runnable中的处理程序更新UI

Android 从另一个Runnable中的处理程序更新UI,android,timer,handler,Android,Timer,Handler,我有一个问题,它应该是一个计时器。我根据Android中的“定时器”阅读了这篇文章: 我的布局中有TextView和ImageView。我在这个ImageView中有AnimationDrawable。我已重写AnimationDrawable类,因为我想知道动画何时完成。但是,我希望在动画结束时调用的runnable可以正常工作。但在这种情况下,当我想每秒更新TextView时,另一个runnable(在下面的代码中)只调用一次(在所有动画中我都能看到数字“1”) 不能从工作线程调用UI方法

我有一个问题,它应该是一个计时器。我根据Android中的“定时器”阅读了这篇文章:

我的布局中有TextView和ImageView。我在这个ImageView中有AnimationDrawable。我已重写AnimationDrawable类,因为我想知道动画何时完成。但是,我希望在动画结束时调用的runnable可以正常工作。但在这种情况下,当我想每秒更新TextView时,另一个runnable(在下面的代码中)只调用一次(在所有动画中我都能看到数字“1”)


不能从工作线程调用UI方法。相反,您需要将mUpdateTimeTask中的代码更改为

private Runnable mUpdateTimeTask = new Runnable() {
    public void run() {            
         seconds++;             
         timeFlow.post(new Runnable() {
               timeFlow.setText(String.valueOf(seconds));
         });
         // It's not clear if handler is accessible here, but you get the picture.
         handler.postDelayed(mUpdateTimeTask, 100); 
    }
};

《android开发指南》中的部分有更多的例子。

噢,别忘了调用
handler.postDelayed(mUpdateTimeTask,100)
在run()方法的末尾。Handler.postDelayed是一次性快照。我将编辑我的回复以反映这一点。谢谢,它确实有效。但我还有一个问题。我的动画已完成,已调用runnable-AnimationDrawable OnFinishCallback,但“计时器”仍在工作。我认为当我的动画停止时它应该停止。哦,这太简单了,只需使用
handler.removeCallbacks(mUpdateTimeTask)。
private Runnable mUpdateTimeTask = new Runnable() {
    public void run() {            
         seconds++;             
         timeFlow.post(new Runnable() {
               timeFlow.setText(String.valueOf(seconds));
         });
         // It's not clear if handler is accessible here, but you get the picture.
         handler.postDelayed(mUpdateTimeTask, 100); 
    }
};