我有这个方法:
public void onClick(View v) {
if (test != true) {
test = true;
start = System.currentTimeMillis();
end = System.currentTimeMillis() - start;
DateFormat df = new SimpleDateFormat("HH 'hours', mm 'mins,' ss 'seconds'");
df.setTimeZone(TimeZone.getTimeZone("GTM+0"));
tv.setText(df.format(new Date(end)));
} else {
DateFormat df = new SimpleDateFormat("HH 'hours', mm 'mins,' ss 'seconds'");
end = System.currentTimeMillis() - start;
df.setTimeZone(TimeZone.getTimeZone("GTM+0"));
tv.setText(df.format(new Date(end)));
}
我想让“tv”变量继续输出时间值,而不是在“else”语句之后停止 - 所以我将始终看到时间的当前值。
我试图通过布尔值进行循环,但没有成功。
答案 0 :(得分:2)
你不能在主(UI)线程上循环 - 这将锁定应用程序。您需要创建一个工作线程来完成计时。它会定期将可运行的内容发布到UI线程更新tv
。
在Android中有很多方法可以做到这一点。以下是一些简单的本土方法的示例代码:
private Runnable updater = new Runnable() {
public void run() {
DateFormat df = new SimpleDateFormat("HH 'hours', mm 'mins,' ss 'seconds'");
end = System.currentTimeMillis() - start;
df.setTimeZone(TimeZone.getTimeZone("GTM+0"));
tv.setText(df.format(new Date(end)));
}
}
private class TimerThread extends Thread {
public void run() {
while (!isInterrupted()) {
try {
sleep(1000L);
runOnUiThread(updater);
} catch (InterruptedException e) {
break;
}
}
}
}
然后在TimerThread
中创建并启动onResume()
并在onPause()
中断它(因此它会退出)。
答案 1 :(得分:1)
为了更新时间,请使用TimerTask
答案 2 :(得分:0)
我高兴地建议使用Handler
来完成这项工作。
之前已经回答过这个问题,你可以找到我的回答here。这是一个完整的计划。
祝你好运。