如何在未来的特定时间调用方法,精确度为纳秒

时间:2014-08-08 13:59:50

标签: android performance scheduled-tasks

我试图在将来的特定时间将命令发送到BTRelay,准确度为纳秒。我需要多次发送命令,延迟精度为纳秒。因此,为了延迟,我使用带有While循环的SystemClock.elapsedRealtimeNanos()。我的代码延迟500毫秒 -

// store the time after 500ms
long testElapsedTime = SystemClock.elapsedRealtimeNanos() + (500 * 1000000l);
// loop for delay
while(testElapsedTime - SystemClock.elapsedRealtimeNanos() >= 0l)
{   
}

为了测试上述逻辑,我用它进行测试。我的测试代码是 -

// Log 1
Log.d( "Test the our delay logic start loop" , "Test the our delay logic start loop"); 
for(int i = 1 ; i <= 10 ; i++)
{
   // Log 2
   Log.d( "Test the our delay logic Start"+ i , "Test the our delay logic Start 500 " +     i);
   testElapsedTime = SystemClock.elapsedRealtimeNanos() + (500 * 1000000l);
   // Loop for delay
   while(testElapsedTime - SystemClock.elapsedRealtimeNanos() >= 0l)
   {    
   }
   // Log 3                 
   Log.d( "Test the our delay logic End"+ i , "Test the our delay logic 600 End" + i);

}
   // Log 4 
   Log.d( "Test the our delay logic end loop" , "Test the our delay logic end loop" );

我在测试代码上运行3次。当我看到Log 2和3的时间差时,大部分时间是500ms但是有些时间它增加了几毫秒.3轮的差异为

第1轮:( Log 2和3的时差)

  1. 500ms的
  2. 500ms的
  3. 505ms
  4. 500ms的
  5. 500ms的
  6. 500ms的
  7. 500ms的
  8. 500ms的
  9. 500ms的
  10. 500ms的
  11. 第2轮:

    1. 500ms的
    2. 500ms的
    3. 500ms的
    4. 500ms的
    5. 505ms
    6. 500ms的
    7. 500ms的
    8. 500ms的
    9. 500ms的
    10. 520ms
    11. 第3轮:

      1. 500ms的
      2. 505ms
      3. 500ms的
      4. 500ms的
      5. 505ms
      6. 505ms
      7. 500ms的
      8. 505ms
      9. 500ms的
      10. 510ms
      11. 请告诉我如何实现纳秒级延迟精度。 提前谢谢。

0 个答案:

没有答案