[英]Activity lifecycle after finish() has called
我想知道如果我調用finish()
或生命周期直接跳轉到onDestroy()
是否調用了onSaveInstance()
, onPause()
和onStop()
onDestroy()
。
我還想知道是否總是調用android.support.v4庫的onRetainNonConfigurationInstance()
或僅在由於配置更改而重新創建活動時調用(當活動停止並放回堆棧時我可以信任它嗎?)
謝謝
這將回答您問題的第一部分。
如果在onCreate()之外的任何地方調用finish()
,則將調用onPause()
和onStop()
,但如果從onCreate()調用則不會:
您可以從此函數內調用finish(),在這種情況下,將立即調用onDestroy(),而不會執行其余的活動生命周期(onStart(),onResume(),onPause()等)。
即使您在onCreate()
finish()
之外調用finish()
onSaveInstanceState()
也不會調用onSaveInstanceState()
,因為用戶將永遠無法返回到活動,因此它將永遠不需要恢復其狀態。
通過添加所有這些方法的日志,您幾乎可以測試自己是否對自己的問題產生疑問。 至於您的第二個,onRetainNonConfigurationInstance()在重新創建時被調用。
ActivityThread類中使用此方法來破壞活動,並具有以下代碼行:
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從舊的活動實例傳播到新的活動實例,從加載的位圖到網絡連接,再到正在運行的線程均勻擴展狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.