2013-05-30 50 views
0

我在想如果我呼叫finish()或生命週期直接跳轉到onDestroy(),我是否會調用onSaveInstance(),onPause()onStop()完成後的活動生命週期()調用

我也想知道是否總是調用android.support.v4庫的onRetainNonConfigurationInstance(),或者只是因爲配置更改而重新創建活動時(我可以信任它,當活動停止並放在backstack上時)?

謝謝

+0

**這取決於當你調用finish()** 見:http://stackoverflow.com/questions/12655898/finish-and-the-activity-lifecycle/30227647#30227647 – ceph3us

回答

1

你可以通過在所有這些方法上添加一個日誌來測試你的自我。至於你的第二個,onRetainNonConfigurationInstance()被重新調用時被調用。

這種方法在ActivityThread類用於destory活性和具有這些代碼行:

3424try { 
3425 r.lastNonConfigurationInstances 
3426   = r.activity.retainNonConfigurationInstances(); 
3427} catch (Exception e) { 
3428 if (!mInstrumentation.onException(r.activity, e)) { 

activity.retainNonConfigurationInstances();然後將觸發onRetainNonConfigurationInstance()

還有,如果你看一下docs,這裏有一些項重要線路:

活動的一個新實例總是會立即這一個的onDestroy之後創建 ()叫做。特別是,在此期間不會發送任何消息 (當返回的對象不具有要與之關聯的活動的 時)。您返回的對象 將始終可用於此處所述的以下活動實例的getLastNonConfigurationInstance() 方法。這些 保證被設計爲使得活動可以使用這個API將從 加載的位圖到舊的活動實例的廣泛狀態傳播到網絡連接,以均勻地主動運行 線程。

+0

謝謝!我試圖記錄回調,但我想確保我得到它的權利:-) 這滿足了我的需求。 – Bertuz

5

這將回答您的問題的第一部分。

如果你打電話finish()外的onCreate()的任何地方,然後onPause()onStop()將被調用,但如果你從onCreate()叫它:

你可以從這個函數中調用finish(),在這種情況下 onDestroy()將立即被調用,而沒有執行任何其餘的 活動生命週期(onStart(),onResume(),onPause()等)。即使你叫finish()onCreate(),因爲用戶將永遠無法返回到活動,使之永遠需要恢復其狀態

onSaveInstanceState()將不會被調用。

+0

得到它!非常感謝你。現在我對活動的生命週期有一個明確的觀點(文檔通常會分散這些有用的信息,並且無法立即清除)。再次感謝 – Bertuz