Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在测量之间创建延迟_Java_Android_Delay - Fatal编程技术网

Java 在测量之间创建延迟

Java 在测量之间创建延迟,java,android,delay,Java,Android,Delay,我试图对信号强度进行一组测量,所以我想在相同的方法(返回所需值)执行之间进行一次延迟-value1…delay…value2…delay。。。。目前我正在使用 Thread.sleep(DELAY); 这种造成延迟的方法似乎有效,但据我所知,它会使整个应用程序停止运行。我浏览了Android开发者的网站,发现了其他一些使用计时器和ScheduledExecutorService的方法。但我不完全理解如何使用这两种方式来创建延迟。也许有人会是某种类型的,给我一些想法或方向开始 java.util

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

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),实际上我不知道为什么我没有使用它。