??????小菜前段時(shí)間整理過(guò)一些關(guān)于 Activity 與 Fragment 生命周期的小博文:Android7.0 分屏下 Activity 與 Fragment 生命周期(一) 和 我們真的了解 Activity 與 Fragment 的生命周期嗎?今天繼續(xù)這個(gè)話題,稍稍整理一下,在 Android7.0 分屏情況下,兩個(gè) Activity 的生命周期之間的執(zhí)行順序,且同樣暫不研究橫豎屏切換時(shí)的過(guò)程。
??????小菜根據(jù)輸出的兩個(gè) Demo 生命周期簡(jiǎn)單整理一下交互間的執(zhí)行順序。
小菜操作步驟如下:
-
首次啟動(dòng)初始化 ACE09_1,其執(zhí)行生命周期為:onCreate -> onStart -> onResume;
-
點(diǎn)擊手機(jī)的【任務(wù)鍵】, ACE09_1 其執(zhí)行生命周期為:onPause -> onStop;
-
將 ACE09_1 進(jìn)行分屏操作,占據(jù)屏幕一半,其執(zhí)行生命周期為:onDestroy -> onCreate -> onStart -> onResume -> onPause;
-
操作屏幕未擋住的下半部分,首次啟動(dòng)初始化 ACE09_2,其執(zhí)行生命周期為:onCreate -> onStart -> onResume;若 ACE09_2 已啟動(dòng)處于后臺(tái),則此時(shí)生命周期為:onDestroy -> onCreate -> onStart -> onResume;
-
此時(shí)點(diǎn)擊 ACE09_2 不會(huì)執(zhí)行任何生命周期,因?yàn)榇藭r(shí) ACE09_2 是最新的操作頁(yè)面;但若點(diǎn)擊 ACE09_1 屏幕時(shí),執(zhí)行的生命周期為:ACE09_2 onPause -> ACE09_1 onResume;此時(shí) ACE09_1 處于 onResume 狀態(tài),ACE09_2 處于 onPause 狀態(tài),若再點(diǎn)擊 ACE09_2 屏幕時(shí),執(zhí)行生命周期為:ACE09_1 onPause -> ACE09_2 onResume;
-
此時(shí) ACE09_1 與 ACE09_2 分別占據(jù)屏幕的一半,調(diào)整屏幕比例,ACE09_1 屏幕范圍超過(guò)手機(jī)屏幕一半,此時(shí)響應(yīng)的 ACE09_2 占據(jù)剩余不足半個(gè)手機(jī)屏幕范圍,此時(shí)生命周期:ACE09_1 (onPause ->) onStop -> onDestroy -> onCreate -> onStart -> onResume -> onPause;若調(diào)整的是 ACE09_2 屏幕范圍超過(guò)手機(jī)屏幕一半,執(zhí)行的則是 ACE09_2 的生命周期,與剛才一致。重點(diǎn)是 onPause 是否執(zhí)行,則需要看哪個(gè) Activity 的當(dāng)前狀態(tài),若處于 onResume 狀態(tài)則先執(zhí)行 onPause,若正好處于 onPause 狀態(tài)則不再執(zhí)行 onPause 狀態(tài)。
-
此時(shí)兩個(gè) Activity 處于一個(gè)大于手機(jī)屏幕一半,另一個(gè)占據(jù)另一部分,若調(diào)整屏幕范圍,使兩個(gè) Activity 各占據(jù)手機(jī)屏幕一半,其執(zhí)行生命周期為:(onPause ->) onStop -> onDestroy -> onCreate -> onStart -> onResume;執(zhí)行的生命周期是屏幕范圍占據(jù)超過(guò)手機(jī)屏幕一半的 Activity,同樣 onPause 是否執(zhí)行則需要看哪個(gè) Activity 的當(dāng)前狀態(tài),若處于 onResume 狀態(tài)則先執(zhí)行 onPause,若正好處于 onPause 狀態(tài)則不再執(zhí)行 onPause 狀態(tài)。
-
由第 6 步后,調(diào)整屏幕分割線,使占據(jù)屏幕超過(guò)一半的 Activity 與少于屏幕一半的 Activity 對(duì)調(diào),Demo 測(cè)試 ACE09_1 占據(jù)屏幕由大到小,其執(zhí)行順序?yàn)椋?strong>ACE09_2
onPause -> onStop -> ACE09_1 onStop -> ACE09_2 onDestroy -> ACE09_1 onDestroy -> ACE09_2 onCreate -> onStart -> onResume -> ACE09_1 onCreate -> onStart -> onResume -> onPause;
Tips:
<1> 此時(shí)的生命周期的執(zhí)行順序并不是絕對(duì)的,優(yōu)先執(zhí)行哪個(gè) Activity 生命周期需要看這個(gè) Activity 是否處于 onResume 狀態(tài);
<2> 兩個(gè) Activity 都需要先銷毀完成后,再重新繪制;而在銷毀和創(chuàng)建過(guò)程中,兩個(gè) Activity 的生命周期是交互進(jìn)行的,并非先執(zhí)行完一個(gè)以后在執(zhí)行另一個(gè) Activity 的生命周期。
-
測(cè)試 ACE09_1 在屏幕上半部分,ACE09_2 處于屏幕下半部分,調(diào)整屏幕分割線,將處于下半部分的 Activity 劃到底部,只留下上半部分 Activity,此時(shí)生命周期為:ACE09_1 onStop -> onDestroy -> onCreate -> onStart -> onResume -> onPause -> ACE09_2 onPause -> onStop -> ACE09_1 onResume,其生命周期并不絕對(duì),是兩個(gè) Activity 交互執(zhí)行;調(diào)整屏幕分割線,將處于上半部分 Activity 劃到頂部,只留下下半部分 Activity,此時(shí)生命周期為:ACE09_2 onPause -> onStop -> onDestroy -> onCreate -> onStart -> onResume -> ACE09_1 onStop。

-
點(diǎn)擊手機(jī)【分屏】按鍵,會(huì)將處于屏幕下半部分的 Activity 關(guān)閉,執(zhí)行周期為:onPause -> onStop;
-
ACE09_2 處于屏幕下半部分,且處于 onResume 狀態(tài),此時(shí)點(diǎn)擊屏幕【返回】按鍵,此時(shí) ACE09_2 會(huì)銷毀,而 ACE09_1 不變,不會(huì)占據(jù)整個(gè)屏幕,此時(shí)生命周期為:ACE09_2 onPause -> onStop -> onDestroy;若 ACE09_2 處于屏幕下半部分,且 ACE09_1 處于 onResume 狀態(tài),此時(shí)點(diǎn)擊屏幕【返回】按鍵,此時(shí) ACE09_1 會(huì)銷毀,且 ACE09_2 會(huì)占據(jù)整個(gè)屏幕范圍,其執(zhí)行周期為:ACE09_1 onPause -> ACE09_2 onResume -> ACE09_1 onStop -> onDestroy -> ACE09_2 onPause -> onStop -> onDestroy -> onStart -> onResume。
來(lái)源: 阿策小和尚












