2013-01-12 34 views
3

如何在每個定義的時間安排一個功能,並選擇更改這個時間? 我發現我可以使用計時器& timerTask或處理程序。它這麼想的重複我所定義的時間問題,它重複randomaly ...android - 如何重複一個函數的每一段時間?

runnable = new Runnable() { 

     @Override 
     public void run() { 
      //some action 
      handler.postDelayed(this, interval); 
     } 
    }; 

      int hours = settings.getIntervalHours(); 
      int minutes = settings.getIntervalMinutes(); 

      long interval = (hours * 60 + minutes) * 60000; 

      changeTimerPeriod(interval); 

private void changeTimerPeriod(long period) { 
    handler.removeCallbacks(runnable); 
    interval = period; 
    runnable.run(); 
} 
+0

您可以使用手柄呃。您可能會得到您的精確解決方案[這裏](http://stackoverflow.com/a/6242292/6155248) –

回答

9

onCreate方法使用Handler對象。它的postDelayed方法導致Runnable參數被添加到消息隊列中並在指定的時間量過去後運行(在給定示例中爲0)。然後這將在固定的時間速率(本例中爲1000毫秒)後排隊。

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    android.os.Handler customHandler = new android.os.Handler(); 
    customHandler.postDelayed(updateTimerThread, 0); 
} 

private Runnable updateTimerThread = new Runnable() 
{ 
    public void run() 
    { 
     //write here whaterver you want to repeat 
     customHandler.postDelayed(this, 1000); 
    } 
}; 
+0

導致內存泄漏 –

+0

@MarkBuikema泄漏在哪裏?你可以請更具體嗎? –

+0

內存泄漏可能是一個錯誤的術語,但是當應用程序暫停時(我認爲這不是你想要的),這將繼續。 –

2

我使用的解決方案here

但在處理程序初始化的代碼,我用

mHandler = new Handler(getMainLooper); 

,而不是

mHandler = new Handler(); 

這工作對我來說

相關問題