我正在尝试对信号强度进行一组测量,因此我想在相同的方法(返回所需的值)执行之间做出延迟 - value1 ... delay .... value2 .... delay。 ...目前我正在使用
Thread.sleep(DELAY);
这种创建延迟的方式似乎有效,但据我所知它会使整个应用停止。我查看了Android Developers网站,并找到了一些使用Timer和ScheduledExecutorService的方法。但我不完全了解如何使用这两种方式创建延迟。可能有人会某种形式,并给我一些想法或指示开始?
答案 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);
}
}