0

我有这个方法:

        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”语句之后停止 - 所以我总是会看到时间的当前值。

我试图通过布尔值进行循环,但没有成功。

4

3 回答 3

2

您不能在主 (UI) 线程上循环——这将锁定应用程序。您将需要创建一个工作线程来进行计时。它会定期向 UI 线程 update 发布一个 runnable 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()(这样它就会退出)。

于 2012-04-26T05:33:21.677 回答
1

为了更新时间,请使用TimerTask

于 2012-04-26T05:36:58.710 回答
0

我强烈建议使用 aHandler来完成这项工作。

之前已经回答过这个问题,你可以在这里找到我的答案。这是一个完整的程序。

祝你好运。

于 2012-04-26T05:49:31.603 回答