我有一個小測試應用程序,我正在其中有一個計時器,更新textview從100倒數到0.這工作正常,但現在我試圖暫停應用程序,如果用戶按下手機上的後退按鈕,然後在他們重新打開應用程序時從停止的位置重新啓動計時器。這裏是我使用的代碼:onPause/onResume活動問題
@Override
public void onPause()
{
if(this._timer_time_remaining > 0) {
this.timer.cancel();
}
super.onPause();
Log.v("Pausing", String.format("Pausing with %d", this._timer_time_remaining));
}
@Override
public void onResume()
{
Log.v("Resuming", String.format("Resuming with %d", this._timer_time_remaining));
if(this._timer_time_remaining > 0) {
start_timer(this._timer_time_remaining);
}
super.onResume();
}
的START_TIMER()方法創建一個CountDownTimer哪些更新在onTick方法TextView的並更新this._timer_time_remaining int變量。
CountDownTimer和_timer_time_remaining都在類級別這樣的聲明:
private CountDownTimer timer;
private int _timer_time_remaining;
從Log.v()打印我看到_timer_time_remaining變量時的onPause被稱爲存儲秒正確的號碼,但是當onResume開始時它被設置回0。爲什麼變量被重置?我認爲應用程序會繼續在背景中以相同的值運行。我錯過了什麼嗎?這是在擴展Activity的類中聲明的。
在此先感謝!
注:編輯清理代碼複製
首先,感謝您的迴應。 我用onSaveInstanceState(Bundle savedInstancestate)方法替換了我的onPause方法,但是當我按下後退按鈕離開我的應用程序時,這似乎不會被調用。我的LogCat消息中沒有任何消息顯示出來,所以我認爲它根本不會被調用。我是否需要onPause和onSaveInstanceState實現?或者應該onSaveInstanceState處理它? – Blather 2010-03-14 20:56:59
文檔解釋了這種情況:「調用onPause()和onStop()時的一個示例,而不是此方法是當用戶從活動B返回到活動A時:不需要在B上調用onSaveInstanceState(Bundle),因爲特定的實例永遠不會被恢復,所以系統避免調用它。「 按下後面不會調用onSaveInstanceState,但按Home鍵。 – 2010-03-14 22:21:15
感謝您的回覆。我確實看到了這一點,但如果在按下後退按鈕時不調用onSaveInstanceState,它將不會照顧我的問題,是嗎?我只是希望倒計時計時器在按下後退按鈕時停止,然後當應用程序從主屏幕再次啓動時從相同位置重新啓動。我可能會誤解,但似乎並沒有這樣做。 再次感謝您迄今爲止所採取的幫助,我在這裏只是想念一些東西。 – Blather 2010-03-14 22:41:17