2011-04-28 208 views
1

我嘗試開發一個簡單的計時器蜂鳴器,即每小時一瞥。對於時序我用一個服務和處理程序,這裏的例子:Handler postDelayed延遲時間長於配置

void onStart(...){ 
     handler.postDelayed(timerRunnable, ONE_HOUR); 
    } 

    private Runnable timerRunnable = new Runnable() { 

    @Override 
     public void run() { 
       ...beep 
       handler.postDelayed(timerRunnable, ONE_HOUR); 
     } 
    }; 

的run()方法將被解僱不確定性,我認爲它是依賴從目前的設備使用。

我已經嘗試了與TimerTask和'手動'線程實現相同的場景,但具有相同的不確定性結果。

回答

0

Android不是實時操作系統。所有postDelayed()保證是它將至少是指定的毫秒數。除此之外,將主要依賴於主應用程序線程正在做什麼(如果您將它捆綁在一起,則無法處理Runnable),其次是設備上正在進行的其他操作(服務以後臺優先級運行並因此獲得更少的CPU時間比前景)。

+0

與undeterministic我的意思是長達20分鐘後:( – Mark 2011-04-28 21:03:18

+1

@馬克:。@LeffelMania講事實,你*不*希望有一個服務遊逛內存僅標記出持續的時間請請使用'AlarmManager'來解決這個問題,它可以解決你的問題,這是一個副作用。 – CommonsWare 2011-04-28 21:23:34