Java 在测量之间创建延迟
我试图对信号强度进行一组测量,所以我想在相同的方法(返回所需值)执行之间进行一次延迟-value1…delay…value2…delay。。。。目前我正在使用Java 在测量之间创建延迟,java,android,delay,Java,Android,Delay,我试图对信号强度进行一组测量,所以我想在相同的方法(返回所需值)执行之间进行一次延迟-value1…delay…value2…delay。。。。目前我正在使用 Thread.sleep(DELAY); 这种造成延迟的方法似乎有效,但据我所知,它会使整个应用程序停止运行。我浏览了Android开发者的网站,发现了其他一些使用计时器和ScheduledExecutorService的方法。但我不完全理解如何使用这两种方式来创建延迟。也许有人会是某种类型的,给我一些想法或方向开始 java.util
Thread.sleep(DELAY);
这种造成延迟的方法似乎有效,但据我所知,它会使整个应用程序停止运行。我浏览了Android开发者的网站,发现了其他一些使用计时器和ScheduledExecutorService的方法。但我不完全理解如何使用这两种方式来创建延迟。也许有人会是某种类型的,给我一些想法或方向开始
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秒后调用某个方法的代码片段
这是一段代码,在每1秒延迟1秒后将调用某个方法。您可以使用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=new Handler();)和一个开始时间(还有uptimeMillis)。这将每秒更新一次,但您可以在更长的时间内更改它。
您可以使用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=new Handler();)和一个开始时间(还有uptimeMillis)。这将每秒更新一次,但您可以在更长的时间内更改它。
提供了一个很好的示例,说明如何使用它:
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);
}
}
导入静态java.util.concurrent.TimeUnit.*;
类蜂鸣器控制{
private final ScheduledExecutorService scheduler=Executors.newScheduledThreadPool(1);
公共空间{
最终可运行蜂鸣器=新可运行(){
公开募捐{
System.out.println(“嘟嘟声”);
}
};
//等待10秒后,每10秒运行一次寻呼机RunEnable
final ScheduledFuture BepperHandle=调度器。scheduleAtFixedRate(蜂鸣器,10,10,秒);
//安排一个小时后取消寻呼机
scheduler.schedule(新的Runnable(){
公开募捐{
蜂鸣器手柄。取消(真);
}
},60*60,秒);
}
}
提供了一个很好的使用示例:
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);
}
}
导入静态java.util.concurrent.TimeUnit.*;
类蜂鸣器控制{
private final ScheduledExecutorService scheduler=Executors.newScheduledThreadPool(1);
公共空间{
最终可运行蜂鸣器=新可运行(){
公开募捐{
System.out.println(“嘟嘟声”);
}
};
//等待10秒后,每10秒运行一次寻呼机RunEnable
final ScheduledFuture BepperHandle=调度器。scheduleAtFixedRate(蜂鸣器,10,10,秒);
//安排一个小时后取消寻呼机
scheduler.schedule(新的Runnable(){
公开募捐{
蜂鸣器手柄。取消(真);
}
},60*60,秒);
}
}
有一个关于的教程。你可以看一看,这可能会有所帮助。有一个关于的教程。您可以查看一下,这可能会有所帮助。要使用计时器,请创建一个计时器实例
Timer mTimer=new Timer()代码>
现在可以计划要运行的任务了
mTimer.scheduleAtFixedRate(new TimerTask() {
public void run() {
//THE TASK
}
}, DELAY, PERIOD);
延迟=首次执行前的时间量(毫秒)
LONG=后续执行之间的时间量(毫秒)
有关详细信息,请参阅。要使用计时器,请创建计时器实例
Timer mTimer=new Timer()代码>
现在可以计划要运行的任务了
mTimer.scheduleAtFixedRate(new TimerTask() {
public void run() {
//THE TASK
}
}, DELAY, PERIOD);
延迟=首次执行前的时间量(毫秒)
LONG=后续执行之间的时间量(毫秒)
更多信息请参见。我有两个问题:1。您确定我应该为StartTime使用uptimeMillis,而不是mStartTime=System.currentTimeMillis()?2.为什么你有100个在mHandler。postDelayed?还有一个问题。您的代码应该插入OnCreate还是只插入main类中?runnable应该只插入主类mHandler.postDelayed中,您要在其中启动计时器。这将在0.1秒后开始,但我想你也可以使用mHandler.post(mUpdateTimeTask),实际上不知道我为什么不使用它。我有两个问题:1。您确定我应该为StartTime使用uptimeMillis,而不是mStartTime=System.currentTimeMillis()?2.为什么你有100个在mHandler。postDelayed?还有一个问题。您的代码应该插入OnCreate还是只插入main类中?runnable应该只插入主类mHandler.postDelayed中,您要在其中启动计时器。这将在0.1秒后开始,但我想你也可以使用mHandler.post(mUpdateTimeTask),实际上我不知道为什么我没有使用它。