我在想如果我呼叫finish()
或生命週期直接跳轉到onDestroy()
,我是否會調用onSaveInstance()
,onPause()
和onStop()
。完成後的活動生命週期()調用
我也想知道是否總是調用android.support.v4庫的onRetainNonConfigurationInstance()
,或者只是因爲配置更改而重新創建活動時(我可以信任它,當活動停止並放在backstack上時)?
謝謝
我在想如果我呼叫finish()
或生命週期直接跳轉到onDestroy()
,我是否會調用onSaveInstance()
,onPause()
和onStop()
。完成後的活動生命週期()調用
我也想知道是否總是調用android.support.v4庫的onRetainNonConfigurationInstance()
,或者只是因爲配置更改而重新創建活動時(我可以信任它,當活動停止並放在backstack上時)?
謝謝
你可以通過在所有這些方法上添加一個日誌來測試你的自我。至於你的第二個,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將從 加載的位圖到舊的活動實例的廣泛狀態傳播到網絡連接,以均勻地主動運行 線程。
謝謝!我試圖記錄回調,但我想確保我得到它的權利:-) 這滿足了我的需求。 – Bertuz
這將回答您的問題的第一部分。
如果你打電話finish()
外的onCreate()的任何地方,然後onPause()
和onStop()
將被調用,但如果你從onCreate()叫它:
你可以從這個函數中調用finish(),在這種情況下 onDestroy()將立即被調用,而沒有執行任何其餘的 活動生命週期(onStart(),onResume(),onPause()等)。即使你叫
finish()
外onCreate()
,因爲用戶將永遠無法返回到活動,使之永遠需要恢復其狀態
onSaveInstanceState()
將不會被調用。
得到它!非常感謝你。現在我對活動的生命週期有一個明確的觀點(文檔通常會分散這些有用的信息,並且無法立即清除)。再次感謝 – Bertuz
**這取決於當你調用finish()** 見:http://stackoverflow.com/questions/12655898/finish-and-the-activity-lifecycle/30227647#30227647 – ceph3us