【发布时间】:2013-03-10 01:03:50
【问题描述】:
我正在尝试制作时钟,使用 TextView :)
这里有人告诉我,我不能使用普通线程来更改 UI,而是 Handler 或 AsyncTask。几天前我设法让它工作,但不是一个一致的线程。
现在我想要的是一个始终如一的线程,它总是在更改我的Textview 的文本。我试过用这个,但没有用,有什么帮助吗?
private void startClock() {
new Handler().postDelayed(new Runnable(){
@Override
public void run() {
while (true) {
final long millis = System.currentTimeMillis() - MainActivity.startedAt;
clock.setText("" + millis);
runOnUiThread (new Runnable() {
@Override
public void run() {
clock.setText("" + millis);
}
});
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}, 2000);
}
【问题讨论】:
-
为什么不使用
Timer类呢?会让你的生活更简单。见这里:stackoverflow.com/questions/15317600/… -
这可能是一个解决方案,不知道 Timer 类,但这只是一次运行,对吧?我想要一个时钟一直在运行..我需要多次调用计时器,并且可能导致我同样的冻结..感谢您的回复!真的很感激;)总是有人在这里帮助:)
-
不,您可以安排定期重复运行,它会为您处理大部分逻辑。
-
怎么样?只是多次调用它?像在一个循环内?但我不能使用 while(true),接受答案的另一个人告诉我:/
-
您基本上只需将
Timer传递给一个名为TimerTask的回调函数,并给它一个固定的时间间隔来执行TimerTask。不需要循环。请参阅我链接的问题以获取更多详细信息...
标签: android android-ui android-handler