簡體   English   中英

finish()調用后的活動生命周期

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM