我的代码运行延迟:
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毫秒运行一次,那么这些延迟会怎样?
答案 0 :(得分: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);
实际上你在日志方法之前推迟了它。这应该是run method下的处理程序中的最后一行。
答案 1 :(得分:1)
有时Handler
存在不一致,如果您希望获得准确的结果,请使用TimerTask
。
Handler
和Thread
并不能保证您在准确的时间执行。
答案 2 :(得分:1)
如果手机进入睡眠模式,处理程序会因CPU停止而停止。
Handler&当手机处于睡眠状态时,Runnable无法正常工作,您应该查看AlarmManager或使用前台服务。