流变量的输出

时间:2012-04-26 05:28:27

标签: android time stream boolean

我有这个方法:

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

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

3 个答案:

答案 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。这是一个完整的计划。

祝你好运。