2015-03-30 40 views
5

我試圖研究什麼時候爲活動調用onDestroy方法,但我已經閱讀了一些令人困惑和衝突的信息。總的來說,我的問題是:在什麼情況下onDestroy方法實際上是在一個activity上調用的?更具體地說,如果我有兩個活動,活動A和活動B,如果活動A正在運行並且我創建了一個意圖並切換到活動B,那麼活動A是僅停止了還是被銷燬?onStop vs onDestroy

+4

檢查在Android安卓生命週期: http://stackoverflow.com/questions/8515936/android-activity-life-cycle-what-are-all-these-methods-對於 – 2015-03-30 20:08:47

+1

[Android onStop/onDestroy可能重複 - 何時可能會使用?](http://stackoverflow.com/questions/7236357/android-onstop-ondestroy-when-might-these-be-used) – 2016-03-07 14:53:05

回答

3

像官方documentation說:

onDestroy() 

你的活動之前,您會收到最終的通話將被破壞。這可能是因爲活動正在完成(有人稱爲finish(),或者是因爲系統暫時銷燬此活動的實例以節省空間。您可以使用isFinishing()方法區分這兩個方案。

在您的例子活性的停止,可以通過系統


注意被摧毀每 documentation以上鍊接:

......你在[ onDestroy()]不算被稱爲保存數據的地方... [見] onPause()onSaveInstanceState(Bundle)
+0

活動可能除非系統必須爲其他任務/進程恢復內存,否則它一直處於暫停狀態。 – whoami 2016-04-27 01:50:07

+1

OnDestroy將直接從任何調用中調用完成()onCreate,跳過onStop。當onStop返回時,onDestroy可以在殺死之後被忽略。從Honeycomb開始,應用程序在onStop()返回之前不處於可Killable狀態; pre-honeycomb onPause是可以驅動的狀態。 – 2018-01-07 01:48:39

-6

onDestroy()被稱爲每當:

  • 用戶從「最近使用的應用」的屏幕佔據了活動。
  • 用戶從「最近的應用程序」屏幕中取出活動。

    • 用戶離開當前活動:

    onStop()時被調用。

因此,在您的示例中,當用戶啓動活動B時,活動A稱爲onStop()。根據文件,onDestroy()方法並不總是被調用。 onStop()總是被調用,因此在活動停止之前移動您明確需要執行的代碼。

希望這有助於:d

+0

不完全。這些是*可能性*,但不能保證onStop()或onDestroy()將被調用。 – 2015-03-30 21:15:47

+0

@ChrisStratton如果在方法之前使用'@ Override',它將保證以特定的方法運行代碼,在這種情況下'onStop()'和'onDestroy()' – 2015-03-30 21:17:02

+0

不,它不是。請參閱文檔。系統可以自由地僅僅殺死進程而不用打電話來調用這些方法。一般來說,它會打電話給他們,但文件說它是免費的。 – 2015-03-30 21:21:03