2012-07-18 118 views
1

我有一個更新TextView的CountDownTimer,但是當我按下後退按鈕時,它停止。當我按下後退按鈕時,如何保持CountDownTimer運行

CountDownTimer timer = new CountDownTimer(600000, 100) { 

    public void onTick(long millisUntilFinished) { 
     calendar.setTimeInMillis(millisUntilFinished); 

     cron.setText(sf.format(calendar.getTime())); 
    } 

    public void onFinish() { 
    } 
}; 

當我按下後退按鈕並且活動被破壞時,我該如何保持它運行?

PS:我也開始GPS服務,當計時器啓動時,有沒有辦法將CountDownTimer放入服務中?

回答

2

如果您的計時器需要超越您的Activity的生命週期,那麼它不屬於那裏。您當然可以將它放入Service或另一個可以駐留在內存中的對象(如單例)。

+0

在這種情況下,什麼是最好的:單身或服務? – fonini 2012-07-18 17:01:16

+0

無論適合您的應用程序。沒有對錯。服務很好,因爲系統仍然可以管理他們的生命週期,但這可能超出了您的應用程序所希望的範圍。 – Devunwired 2012-07-18 17:01:41

0

我認爲應該可以將倒數計時器放入服務中。您可以通過向服務發送意向來啓動定時器。此外,你將不得不使用一些機制,如回調或意圖或信使將更新時間傳遞迴您的用戶界面。

0

覆蓋後退按鈕,然後使其表現得像主頁按鈕。這樣你的活動永遠不會被破壞。這就是說,我不認爲這被認爲是「良好的做法」。

要做我說的只是把它放到你的活動課上。

@Override 
public void onBackPressed() { 
    moveTaskToBack(true); 
} 

不管你做什麼,作爲優化,您應該確保TextView的未更新,如果TextView的是不顯示在屏幕上。這應該可以節省電池壽命,並且可能會阻止創建會減少垃圾收集的字符串。

1

正如prashant和Devunwire指出的那樣,您需要使用服務。確保在綁定之前調用startService(),即使調用Activity被銷燬,這也會導致Service保持活動狀態。

確保服務在計時器結束後自行停止,並執行任何其應有的操作。

+0

編輯:我不會覆蓋後退按鈕,因爲你無法正確關閉你的應用程序。 – 2012-07-18 17:16:45

+0

我將計時器移至服務,但TextView未更新。如果我在服務中執行cron.getText(),它將打印該值。但在用戶界面中,它不會更新。 – fonini 2012-07-18 17:28:53

+0

嗯,我不確定。如果你在服務中獲得了價值,你顯然可以訪問這個小部件......也許你需要在視圖上調用'invalidate()'。我使用Messenger將消息從服​​務發送到活動,但該應用程序不是時間關鍵的。你應該試試它有多快。告訴我你的結果! – 2012-07-18 17:41:09

相關問題