自己的總結,請支持原創
四種啟動模式生命周期
我們先來一張最簡單的跳轉的APP界面圖
image.png
相信只要有一點安卓基礎的人都會設計出來上述的界面,就不上代碼了。
Standard
Activity01是標準模式,首次點擊activity01按鈕
執行結果圖如下:
執行結果圖1
再點擊一下activity01按鈕
執行結果圖2
singleTop
Activity02的模式是singleTop
清單文件中設置singleTop
依次開啟01>02>02生命周期如下:
生命周期圖
01運行了onStop();
生命周期圖
?? 這種0202緊挨著復用 ,復用的時候運行了onNewIntent()和onResume()函數。
依次開啟02>01>02
image.png
image.png
image.png
01最后是運行了onStop()函數。
singleTask
設置啟動模式
依次開啟02>01>02
image.png
image.png
image.png
???殺死02之上的01,再復用02,注意這種0202不是緊挨著復用,復用02依次調用的是onNewIntent(),onStart(),onResume()三個函數;而不是僅onNewIntent(),onResume()兩個。
依次開啟01>02>02
生命周期
注意這種0202緊挨著復用情況下的復用會調用
onNewIntent(),onResume()兩個,而不是onNewIntent(),onStart(),onResume()三個。而01最后是運行了onStop()函數。
singleInstance
??一個task里只有一個activity實例,所以開啟同一個activity時是復用已經有的activity。
依次開啟01<02<02
image.png
image.png
生命周期
- 注意這里復用的時候調用的是三個函數。onNewIntent(),onResume(),onStart()
而01最后是運行了onStop()函數。
2、各自的適用場景
??每一種啟動模式有對應的應用場景,一定得清楚。 - singleTop
適合接收通知啟動的內容顯示頁面。例如,某個新聞客戶端的新聞內容頁面,如果收到10個新聞推送,每次都打開一個新聞內容頁面是很煩人的。 - singleTask
適合作為程序入口點。例如瀏覽器的主界面。不管從多少個應用啟動瀏覽器,只會啟動主界面一次,其余情況都會走onNewIntent,并且會清空主界面上面的其他頁面。之前打開過的頁面,打開之前的頁面就ok,不再新建。 - singleTask:a界面購物,b界面確認訂單,c界面付款,如果付款成功會跳到a,如果不付款則返回b,這時候重啟a就會用到singleTask。
- singleInstance
適合需要與程序分離開的頁面。例如鬧鈴提醒,將鬧鈴提醒與鬧鈴設置分離。singleInstance不要用于中間頁面,如果用于中間頁面,跳轉會有問題,比如:A -> B (singleInstance) -> C,完全退出后,在此啟動,首先打開的是B。