2010-07-24 163 views
6

這是正常的。當按下後退按鈕時,onStop()沒有被調用

文檔說

「的調用onStart()和的onStop()方法可以被調用多次,如可見和隱藏到用戶之間的活動交替」

當我按下返回按鈕它會回到之前完全覆蓋舊的活動。

這是怎麼回事?

+0

你能告訴我們一段你正在用來跟蹤onStop方法的相關代碼嗎? – Cristian 2010-07-24 16:11:05

回答

0

你想要onPause(),而不是onStop()。在系統內存不足的情況下,onStop會在活動斷開之前調用。每當用戶離開您的活動時,都會調用onPause。見http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle圖。

+6

謝謝,在圖中顯示「活動不再可見」,然後發生onStop(),那麼「不再可見」是什麼意思呢?我會認爲去參加活動意味着不再可見。 – jax 2010-07-24 16:17:54

+0

在我的理解中,android區分了「前景中的另一個活動」(onPause被調用,但您的活動繼續有一個虛擬機並運行),並且「活動不再可見,因爲它即將被殺死」( onStop,後來,onDestroy被調用)。因此,每當您的活動被隱藏時立即調用onPause,而onStop不常被調用。這只是我對事物的看法,可能有些不準確,但android文檔會說「活動的前臺生命週期發生在對onResume的調用之間,直到對onPause的相應調用。」 – QRohlf 2010-07-24 16:27:49

+0

我可以做什麼,如果我的活動是僅適用於單一用途我如何退出並離開虛擬機每次onPause被稱爲...看到我的問題在http://stackoverflow.com/questions/13928591/a-strange-behavior- of-android-activities-fragments-and-intent – aProgrammer 2012-12-21 08:05:23

0

如果在創建新實例時仍需要這些參數來調用活動實例,則可以使用this hacky solution。 只需在#doStopOperation()和#doDestroyOperation()中實現您的邏輯,而不是#onStop()和#onDestroy(),並確保從您的重寫方法調用super#onStop()和super#onDestroy()。顯然,在擴展此活動時,您不需要擴展AppCompatActivity,而是可以使用常規活動。這在生產版本中適用於我,所以希望它會有所幫助。

我想你可以寫一個定時器黑客以及調用停止破壞,即使沒有創建新實例,但是這取決於你。

2

onStop()每次被調用時Activity不再可見。 所以當按下後退按鈕時onStop()實際上被調用。

簡單的檢查, - 需要在onStop()/onStart()回調和運行調試會話中放置斷點。

但請注意,當前Activity的onStop()很可能會被稱爲AFTER onStart()/onResume()您正在切換到的活動。

因此,我認爲您正在嘗試更新1st Activity的onStop()中的某些內容,並且期望獲取導致錯誤的第2活動的onStart()中的更新數據。

相關問題