在上一篇博客中,Android-Activity啟動模式(launchMode),就介紹了Activity四種啟動模式的特點與使用等,但是到底什么樣子的場景,去使用什么樣子的啟動模式呢
Activity啟動模式分為四種:
如果不配置:launchMode,默認就是:standard 標准的
standard 標准的
singleTop 獨占頂端
singleTask 單任務
singleInstance 單實例
任務棧存放Activity引用 任務棧 進棧 出棧
最上面的Activity,可以稱為:TopActivity 最頂端的Activity
最下面的Activity,可以稱為:BaseActivity 最底端的Activity
Activity啟動模式,不出意外,使用最多的一定是默認的,standard 標准的
但是standard 標准的 這種啟動模式,每啟動一個Activity 就進棧一個Activity,這樣有些情況下是不合理的,我的Activity在最頂端就沒有必要,再次啟動進棧一個 或者啟動進棧多個
,Activity的引用重復,這樣不利於ActivityManager的管理,任務棧Activity引用重復,當點擊返回Back操作的時候,體驗非常不好;
在App應用中,在TopActivity會被再次啟動或者多次啟動的時候,就可以采用singleTop來解決,任務棧Activity引用的重復,利於ActivityManager的管理,讓體驗更加好等...
Android操作系統的 瀏覽器 書簽 Activity的啟動模式 就是采用 singleTop
一般情況下,應用程序的主界面(MainActiviy),的啟動模式是SingleTask,為什么呢,請看以下圖:
Android操作系統 瀏覽器的主界面Activity的啟動模式就是 singleTask
singleInstance 單實例,一個Activity被其他方多次調用(如果不用singleInstance,那會很混亂,好幾個人打電話過來怎么辦,所以需要singleInstance),
並且這個Activity對性能要求高
Android操作系統/package/apps/Phone/AndroidManifest.xml 找到通話界面
Android操作系統的 通話界面Activity 同時接聽兩個電話 就體現了singleInstance的特點
singleInstance除了管理Activity界面,不混亂,不多次進棧,等等。
還有另外一個原因:(singleInstance會開辟一個新的任務棧,來存放Activity的引用,可以提高性能,正好通話界面非常注重性能,因為通話界面 是去啟動硬件貓打電話系列操作)
Android操作系統的應用Phone-->通話界面的啟動模式為什么不用標准模式standard ?
答:1.會非常混亂,例如:多個人打電話過來接聽,或者在 操作系統的聯系人應用中可以看到,在撥打電話的應用也可以看到,任務棧會被進棧多次,管理非常混亂。
2.standard不會開辟新的任務棧,效率不高,通話界面需要去啟動硬件的貓..,很耗時。
Android操作系統的應用Phone-->通話界面的啟動模式為什么不用獨占頂端模式singleTop ?
答:1.無法保證通話界面Activity在頂端,所以會非常混亂,例如:多個人打電話過來接聽,或者在 其他應用打開,在撥打電話的應用也可以看到,任務棧會被進棧多次,管理非常混亂。
2.singleTop不會開辟新的任務棧,效率不高,通話界面需要去啟動硬件的貓..,很耗時。
Android操作系統的應用Phone-->通話界面的啟動模式為什么不用單任務模式singleTask ?
答:1.singleTask單任務模式,會從底端往上找,一旦找到就直接殺到頂端,這是不合理的,不能殺死其他在singleTask之上的Activity。
2.singleTask不會開辟新的任務棧,效率不高,通話界面需要去啟動硬件的貓..,很耗時。