在测量之间创建延迟

时间:2010-10-14 12:17:02

标签: java android delay

我正在尝试对信号强度进行一组测量,因此我想在相同的方法(返回所需的值)执行之间做出延迟 - value1 ... delay .... value2 .... delay。 ...目前我正在使用

Thread.sleep(DELAY);

这种创建延迟的方式似乎有效,但据我所知它会使整个应用停止。我查看了Android Developers网站,并找到了一些使用Timer和ScheduledExecutorService的方法。但我不完全了解如何使用这两种方式创建延迟。可能有人会某种形式,并给我一些想法或指示开始?

5 个答案:

答案 0 :(得分:3)

您可以使用Runnable和处理程序。

private Runnable mUpdateTimeTask = new Runnable() {
    public void run() {

        // Get the difference in ms
        long millis = SystemClock.uptimeMillis() - mStartTime;

        // Format to hours/minutes/seconds
        mTimeInSec = (int) (millis / 1000);

        // Do your thing

        // Update at the next second
        mHandler.postAtTime(this, mStartTime + ((mTimeInSec + 1) * 1000));
    }
};

以处理程序开始:

mHandler.postDelayed(mUpdateTimeTask, 100);

当然,你必须有一个全局的mHandler(私有处理程序mHandler = new Handler();)和一个开始时间(也就是uptimeMillis)。这会每秒更新一次,但您可以将其更改一段时间。 http://developer.android.com/reference/android/os/Handler.html

答案 1 :(得分:1)

java.util.concurrent.Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new java.lang.Runnable()
{
  @Override
  public void run()
  {
    System.out.println("call the method that checks the signal strength here");
  }
  },
  1,
  1,
  java.util.concurrent.TimeUnit.SECONDS
 );

这是代码片段,它会在每1秒初始延迟1秒后调用某种方法。

答案 2 :(得分:1)

有一个关于how to create a simple android Countdown timer的教程。你可以看看,这可能有所帮助。

答案 3 :(得分:1)

要使用Timer,您需要创建一个Timer实例

Timer mTimer = new Timer();

现在可以安排您希望运行的任务。

mTimer.scheduleAtFixedRate(new TimerTask() {  
public void run() {  
//THE TASK  
}  
}, DELAY, PERIOD);

DELAY =首次执行前的时间量(以毫秒为单位)。

LONG =后续执行之间的时间量(以毫秒为单位)。

有关详情,请参阅here

答案 4 :(得分:0)

documentation page for ScheduledExecutorService提供了一个如何使用它的好例子:

import static java.util.concurrent.TimeUnit.*;
class BeeperControl {
  private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

  public void beepForAnHour() {
    final Runnable beeper = new Runnable() {
      public void run() {
        System.out.println("beep");
      }
    };
    // Run the beeper Runnable every 10 seconds after a 10 second wait
    final ScheduledFuture<?> beeperHandle = scheduler.scheduleAtFixedRate( beeper, 10, 10, SECONDS ) ;

    // Schedule something to cancel the beeper after an hour
    scheduler.schedule( new Runnable() {
      public void run() {
        beeperHandle.cancel(true);
      }
    }, 60 * 60, SECONDS);
  }
}