launchMode使用詳解

2022-01-20 10:50:30 字數 2252 閱讀 2873

standard是標準啟動模式,也是預設啟動模式,這種情況下,不管當前back stack(回退棧)中有沒有要啟動的activity例項,系統 都會將乙個新的activity例項放在棧頂。假設我們現在有兩個activity,乙個是mainactivity,另外乙個是mainactivity2,我們先從mainactivity中啟動mainactivity2,然後在mainactivity2中不斷啟動mainactivity2,看看效果:

因為啟動模式是standard,所以每當我們開啟乙個activity,就會有乙個activity放在back stack棧頂,因此,當我們多次開啟mainactivity2之後,我們需要點選6次回退按鈕才能回到主介面,雖然整個應用只有兩個activity,但是mainactivity2卻在棧中儲存了多份例項。

singletop就比較有意思了,當乙個activity的啟動模式是singletop時,如果當前back stack棧頂是要啟動的activity,那麼就不會再建立乙個activity例項,而是直接顯示當前棧頂的activity,同時呼叫該activity的onnewintent()方法;否則就會建立乙個新的activity例項放在棧頂。還是上面那個栗子,改變activity啟動模式後我們看看有什麼不同:

這下不管我們啟動mainactivity2多少次,最終都只需點選兩次後退按鈕就能回到主介面,因為當mainactivity2處於棧頂的時候系統不會再建立新的mainactivity2例項,只是會呼叫當前例項的onnewintent方法。

當乙個activity啟動模式設定為singletask時,如果要啟動activitya,但是當前back stack中已經存在activitya只是不在棧頂,這個時候會將activitya上面的activity全部移除,使得activitya處於棧頂,同時也會呼叫activitya的onnewintent方法。換句話說,對於乙個activity而言,整個back stack中最多隻存在它的乙個例項。假如我們有兩個activity,這兩個activity的啟動模式都是singletask,在mainactivity中啟動mainactivity2,在mainactivity2中啟動mainactivity,然後點選回退按鈕,會出現什麼情況?看下圖:

我們來簡單分析一下,應用啟動之後,back stack中只有乙個mainactivity,當mainactivity啟動mainactivity2的時候,這個時候棧中並沒有mainactivity2,所以會建立乙個mainactivity2的例項放在棧頂,當mainactivity2啟動mainactivity時候,由於棧中已經有了mainactivity,只是不在棧頂,這個時候系統會將棧頂了mainactivity2移除(呼叫mainactivity2的生命週期方法),然後mainactivity就會處於棧頂,這個時候棧中只有乙個activity,所以點選一次回退按鈕就能回到手機主介面。

singleinstance總的來說用的還是比較少見,singleinstance和singletask比較像,不同的是當我們將乙個activity啟動模式設定為singleinstance時,當啟動這個activity時,系統會把這個activity放在乙個新的task中,然後如果有其他應用要使用也從這個新的task中呼叫該activity。注意這裡有了乙個很大的不同就是系統中有了兩個task,假如我們有兩個activity,mainactivity和mainactivity2,mainactivity的啟動模式為預設模式,mainactivity2的啟動模式為singleinstance,當我們從mainactivity啟動mainactivity2之後,然後點選home鍵,再從任務管理器回到mainactivity2,然後點選回退按鈕,看看會出現什麼情況:

當我們通過任務管理器回到mainactivity2的時候,點選一下回退按鈕竟然沒有回到mainactivity,而是直接退出應用,這是因為mainactivity2所在的棧中就它乙個activity,那麼點選回退按鈕當然會退出當前應用。

好了,關於activity啟動模式的就說這些,合理使用activity啟動模式,可以在很大程度上提高應用效能。



各種LaunchMode的使用場景

1 standard 模式 這是預設模式,每次啟用activity時都會建立activity例項,並放入任務棧中。2 singletop 模式 如果在任務的棧頂正好存在該activity的例項,就重用該例項 會呼叫例項的 onnewintent 否則就會建立新的例項並放入棧頂,即使棧中已經存在該ac...

Activity的LaunchMode應用場景思考

1.有哪幾種型別?分別有什麼用?standard,建立乙個新的activity。singletop,棧頂不是該型別的activity,建立乙個新的activity。否則,onnewintent。singletask,回退棧中沒有該型別的activity,建立activity,否則,onnewinte...

Android中的LaunchMode設定

1.設定android launchmode 2.launchmode singletop 表示當返回棧裡面頂棧存在已有的activity,而不會再建立。3.launchmode singletask 表示當返回棧裡面存在已有的activity,而不會再建立,而是直接將該activity放在棧頂,而...