2017-07-27 63 views
1

我有这样的代码运行的延迟:处理程序延迟不统一?

final Handler handler = new Handler(); 
    final int delay = 1000; //milliseconds 
    handler.postDelayed(new Runnable(){ 
     public void run(){ 
      handler.postDelayed(this, delay); 
      Log.e("LOG","HIT"); 
     } 
    }, delay); 

和接收这些日志声明:

07-27 19:02:00.084 1690-1690/com.example.steinbockapplications.myapplication2 E/LOG: HIT 
07-27 19:02:02.089 1690-1690/com.example.steinbockapplications.myapplication2 E/LOG: HIT 
07-27 19:02:03.092 1690-1690/com.example.steinbockapplications.myapplication2 E/LOG: HIT 
07-27 19:02:25.154 1690-1690/com.example.steinbockapplications.myapplication2 E/LOG: HIT 
07-27 19:02:26.155 1690-1690/com.example.steinbockapplications.myapplication2 E/LOG: HIT 

想通它应该运行每1000毫秒,那么什么是与这些延误?

回答

3

嗨@Johnny Rockex我已经运行相同的代码,几乎没有修改。

07-27 22:50:19.999 18973-18973/com.jingged.mermaids E/LOG: HIT 
07-27 22:50:21.000 18973-18973/com.jingged.mermaids E/LOG: HIT 
07-27 22:50:22.001 18973-18973/com.jingged.mermaids E/LOG: HIT 
07-27 22:50:23.002 18973-18973/com.jingged.mermaids E/LOG: HIT 
07-27 22:50:24.003 18973-18973/com.jingged.mermaids E/LOG: HIT 
07-27 22:50:25.005 18973-18973/com.jingged.mermaids E/LOG: HIT 
07-27 22:50:26.006 18973-18973/com.jingged.mermaids E/LOG: HIT 
07-27 22:50:27.007 18973-18973/com.jingged.mermaids E/LOG: HIT 
07-27 22:50:28.008 18973-18973/com.jingged.mermaids E/LOG: HIT 
07-27 22:50:29.009 18973-18973/com.jingged.mermaids E/LOG: HIT 

和代码

final Handler handler = new Handler(); 
    final int delay = 1000; //milliseconds 
    handler.postDelayed(new Runnable(){ 
     public void run(){ 
      Log.e("LOG","HIT"); 
      handler.postDelayed(this, delay); 
     } 
    }, delay); 

其实你在日志方法之前延迟它。这应该是运行方法下处理程序的最后一行。

+0

嗯,认为它不会有任何区别,我想处理程序需要时间来执行?在Xcode中,我期望它接近同步 - 可以证明它在您的订单中有效。 –

1

有时Handler有不一致,如果你想准确的结果去与TimerTask

HandlerThread不能保证在准确的时间执行。

1

如果手机进入睡眠模式,处理程序将停止,因为CPU停止。

处理程序& Runnable在手机处于睡眠状态时不工作,您应该查看AlarmManager或使用前台服务。