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)));

            }

「else」ステートメントの後に停止することなく、「tv」変数が時間値を出力し続けるようにしたいので、常に現在の時間値が表示されます。

ブール値をループしようとしましたが、成功しませんでした。

4

3 に答える 3

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;
            }
        }
    }
}

次に、を作成して開始TimerThreadonResume()、割り込みをかけますonPause()(終了します)。

于 2012-04-26T05:33:21.677 に答える
1

時間を更新するには、TimerTaskを使用してください

于 2012-04-26T05:36:58.710 に答える
0

ジョブに使用することを強くお勧めしHandlerます。

以前にこの質問に回答したことがありますが、ここで私の回答を見つけることができます。完全なプログラムです。

幸運を。

于 2012-04-26T05:49:31.603 に答える