2017-07-27 95 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或使用前臺服務。