【问题标题】:Android: how to use SystemClock.elapsedRealtime() to show second one by one?Android:如何使用 SystemClock.elapsedRealtime() 逐秒显示?
【发布时间】:2012-03-05 07:47:02
【问题描述】:

我正在使用SystemClock.elapsedRealtime() 来显示时间。

但现在我想根据SystemClock.elapsedRealtime() 时间逐一显示要增加的秒数。
是的,我必须使用 thred。

那该怎么做呢?

我已经用这个帖子试过了:

// Start lengthy operation in a background thread
progressThread = new Thread(new Runnable() {

    public void run() {
        while (mProgressStatus < 1000) {
            mProgressStatus = ((int) (SystemClock.elapsedRealtime() / 10));
            // Update the progress bar
            mHandler.post(new Runnable() {

                public void run() {   
                    // try {
                    //  // progressThread.sleep(1000);
                    // } catch (InterruptedException e) {
                    //  // TODO Auto-generated catch block
                    //  e.printStackTrace();
                    // }
                    // progressBar.setProgress(mProgressStatus);
                    System.out.println("SECOND is :" + mProgressStatus);
                }
            });
        }
    }
});

那么我应该在这个线程中进行什么更改以使秒数一一增加??

请帮帮我。

谢谢。

【问题讨论】:

    标签: java android multithreading android-ndk


    【解决方案1】:

    您可以使用Chronometer 类。您可以使用setBase() 将其绑定到SystemClock.elapsedRealtime()。另一种方法是,如果您在 Activity 中使用 Handler 并使用值为 1000 的 sendEmptyMessageDelayed() 方法来更新您的计时器。

    【讨论】:

    • 有可能。你能更详细地解释一下我的情况吗?实际上我已经使用了计时器并且基于计时器时间,我想显示特定最小值和最大值的进度条。
    • 无论如何,谢谢你的回答。
    【解决方案2】:

    如果您想使用第二个线程来获取经过的时间(就像您所做的那样),那么您必须使用某种方法来通知您的 Activity 的主线程必须重新绘制画布,如 herehere.

    您还可以使用已在您的活动主线程中实例化的Handler。从您的第二个线程(获取系统时间)中,您将包含系统时间的Message 发送到处理程序。因为处理程序在主线程中运行,所以从这里更改视图是安全的。我怀疑这是在 Android 上显示系统时间的准确方法,即我认为有更好的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-22
      • 1970-01-01
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多