安卓文本查看计时器

2022-09-02 13:22:17

对于我的Android应用程序,有一个计时器可以测量已经过了多少时间。在100毫秒之后,我用一些文本更新了我的TextView,例如“分数:10时间:100.10秒”。但是,我发现TextView只更新了前几次。应用程序仍然非常响应,但标签不会更新。我试图调用.invalidate(),但它仍然不起作用。我不知道是否有办法解决这个问题,或者有更好的小部件可以使用。

以下是我的代码示例:

float seconds;
java.util.Timer gametimer;
void updatecount() { TextView t = (TextView)findViewById(R.id.topscore);
t.setText("Score: 10 - Time: "+seconds+" seconds");
t.postInvalidate();
}
public void onCreate(Bundle sis) {
... Load the UI, etc...
  gametimer.schedule(new TimerTask() { public void run() {
     seconds+=0.1; updatecount();
} }, 100, 100);
}

答案 1

一般的解决方案是使用在UI线程中运行的android.os.Handler。它只执行一次性回调,因此每次调用回调时都必须再次触发它。但它很容易使用。几年前写了一篇关于这个主题的博客文章:

http://android-developers.blogspot.com/2007/11/stitch-in-time.html


答案 2

我认为正在发生的事情是你正在从UI线程上掉下来。有一个“循环器”线程处理所有屏幕更新。如果你试图调用“invalidate()”,而你不在这个线程上,什么都不会发生。

尝试在你的视图上使用“postInvalidate()”。它将允许你在不在当前 UI 线程中时更新视图。

更多信息请点击这里