2016-05-20 49 views
1

在Activity Lifecycle圖中,有一個從onStop到'App process killed'的onCreate箭頭。我一直在想,現在我要談一談片段;如果整個應用程序進程被銷燬,onCreate如何從onStop接收bundle?系統是否跟蹤殺死的應用程序及其活動包?我認爲這將是如何做到這一點,因爲在那時殺死的應用程序將沒有分配給它的內存。如果App進程被終止,bundle如何發送到onCreate?

此外,從管理活動生命週期>啓動活動頁面的最後一段,「在除了一個之外的所有情況下已經調用onPause()和onStop()之後,系統調用onDestroy()'...'而且這種情況並沒有被描述爲內存不足,這讓我認爲箭頭不應該從onStop到onCreate,因爲「優先級更高的應用程序需要內存」,這是一個錯字還是我讀錯了?我猜想因爲'Killable',我讀錯了嗎?一般來說,整個活動生命週期中的移動看起來像這樣:'圖表

其中之一必須是錯誤的,或者是活動生命週期圖表中的箭頭或「系統調用onDestroy()在所有情況下都調用onPause()和onStop(),除了一個:...「語句,希望我讀出的語境不在

回答

3

如果整個應用程序進程被銷燬,onCreate如何從onStop接收捆綁包?

它不從「onStop收到捆綁」,只要onStop()Bundle沒有任何關係。交付給onCreate()onRestoreInstanceState()Bundle包含放入較早的Bundle,onSaveInstanceState()中的數據。 Bundle的內容通過進程邊界傳遞到核心OS進程,該進程管理未完成活動及其任務的狀態。這些內容會在相關時返回給您的應用程序的全新流程。

系統是否跟蹤殺死的應用程序及其活動包?

操作系統跟蹤未完成的任務。一段時間(上次使用後約30分鐘),它會跟蹤實例狀態Bundle以查看任務上的活動。

該系統在所有情況下調用的onDestroy()後,它已經叫的onPause()和的onStop()除了一個

有一個以上的情況,即onDestroy()不叫。根據系統RAM需求的緊迫性,由於低內存條件而終止進程可能會或可能不會導致onDestroy()被調用。

+0

在maindesk ondestroy沒有被調用是當你按回家放在後臺,然後用戶手動殺死它從應用程序經理 –

+0

@TomerShemesh:'onDestroy()'仍然可以在這種情況下被調用。這取決於「應用程序管理器」是什麼。最近的任務列表/總覽屏幕是Android的一部分,還有第三方任務管理器,仍然應該調用onDestroy()。但是,設置中的「強制停止」以及某些預先安裝的任務管理器(不幸的是)會執行「強制停止」,將會在不調用'onDestroy()'的情況下終止進程。 – CommonsWare

+0

你是對的,這是應該buti有def有時沒有被稱爲 –

1

onCreate在onStop()之後很有可能被調用,使用onSaveInstanceState(),在任何時候活動或片段暫停或停止時調用它們,假設你有一個活動並按回家,OnStop和onSaveInstanceState都被調用,在onSaveInstanceState中保存你的bundle以保存應用程序的狀態。因爲它在背景中太久而死亡,然後何時死亡您打開應用程序時,將從onSaveInstanceState傳遞到SavedInstanceState參數中的oncreate,當它重新創建時。請參閱官方文檔以獲得更多https://developer.android.com/training/basics/activity-lifecycle/recreating.html

+0

感謝您將我引薦至開發人員網站開發>培訓>重新創建活動。它確實有一個非常有用的句子(以及其他有用的句子)。 「...然後,雖然實際的Activity實例不見了,但系統會記住它已經存在,這樣如果用戶導航回到它,系統將使用一組保存的數據創建一個新的活動實例」 – flobacca

相關問題