![](/img/trans.png)
[英]Android Activity Lifecycle called twice when starting new Activity
[英]Android activity lifecycle: state order when new activity starts
如果通過這種方式從Activity1啟動Activity2: startActivity(Activity2);
什么首先執行: onStop()
(Activity1)或onStart()
(Activity2)?
他們是同時工作還是依次工作? 如果一個接一個,首先是什么?
因此,通常來說:如果第一個活動第二個活動開始,那么該活動的狀態順序是什么?
假設活動A通過調用StartActivity(Intent)方法開始活動B,然后生命周期調用如下:-
現在按鈕單擊開始活動(意圖)
一個onPause()
B onCreate()
B onStart()
B onResume()
一個onStop()
.....如果您在活動B中按返回按鈕,則生命周期調用將是.....
B onPause()
一個onRestart()
一個onStart()
一個onResume()
現在再一個場景 “從活動A通過單擊按鈕調用StartActivity(Intent)並在活動B的onstart()方法內部使用finish()方法來啟動活動B”
一個onPause()
B onCreate()
B onStart()
一個onResume()
B onStop()
B onDestory()
根據文檔,在Activity1上的onStop之前會調用Activity2上的onStart(或者,如果您願意,操作系統會在Activity1上調用onStop之前先等待Activity2上的onStart完成)。
來自http://developer.android.com/guide/topics/fundamentals/activities.html :
生命周期回調的順序已明確定義,尤其是當兩個活動處於同一進程中並且一個活動正在啟動另一個活動時。 這是活動A啟動活動性B時發生的操作順序:
活動A的onPause()方法執行。 活動B的onCreate(),onStart()和onResume()方法按順序執行。 (現在,活動B具有用戶焦點。)然后,如果活動A在屏幕上不再可見,則執行其onStop()方法。
關鍵是要了解活動是如何開始的。 在startActivity()方法中發布Intent時,您只是要求系統啟動此活動。 下一個系統嘗試啟動Activity2並將消息發送到Activity1。 順序不確定,在不同情況下可以不同。
當兩個活動都在相同的流程(應用程序)中工作時,我似乎無所適從。如所指出的,丹尼爾·波波夫(Daniil Popov): https : //developer.android.com/guide/components/activities/activity-lifecycle.html (協調活動部分)
每當我們從第一個活動導航到第二個活動時,均會先調用onPause()方法,再調用onStop(),然后再調用第二個活動的onCreate()方法,再調用onStart(),然后再調用onResume()。
同樣在按返回鍵導航回firstactivity時
調用第二個活動的onPause()方法,然后調用onStop(),然后調用第一個活動的onRestart()方法,然后調用onStart(),然后調用onResume()。
生命周期回調的順序已明確定義,尤其是當兩個活動處於同一進程中並且一個活動正在啟動另一個活動時。 這是活動A啟動活動性B時發生的操作順序:
活動A的onPause()方法執行。 活動B的onCreate(),onStart()和onResume()方法按順序執行。 (現在,活動B具有用戶焦點。)然后,如果活動A在屏幕上不再可見,則執行其onStop()方法。
假設活動A
通過Calling StartActivity(Intent)
方法啟動活動B
,然后生命周期調用如下:
A
onCreate()
, A
onStart()
, A onResume()
現在按鈕單擊開始活動startActivity(intent)
A
onPause()
, B
onCreate()
, B
onStart()
, B
onResume()
, A onStop()
如果您在活動B
按返回按鈕,則生命周期調用將為.....
B
onPause()
, A
onRestart()
, A
onStart()
, A
onResume()
, B
onStop()
, B
onDestory()
現在多了一個方案“從活動A
開始活動B
致電StartActivity(Intent)
按鈕點擊使用finish()
內法onstart()
方法上的活動B
”
A
onPause()
, B
onCreate()
, B
onStart()
, A
onResume()
, B
onStop()
, B
onDestory()
這是活動A啟動活動B時發生的操作順序:
活動A的onPause()方法執行。
活動B的onCreate(),onStart()和onResume()方法按順序執行。 (活動B現在具有用戶焦點。)
然后,如果活動A在屏幕上不再可見,則執行其onStop()方法。
使用日志將日志發布到Logcat。
Log.v("STATE", "Pause...and so on");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.