Activity的启动模式详解
Activity的啟動模式詳解
Activity有四種載入模式:standard(默認), singleTop, singleTask和 singleInstance。
(1).standard(默認):Activity的默認載入方法。
即使某個要啟動的Activity在Task棧中已經存在,相同會新創建一個實例壓入棧中。也就是說:該模式的Activity。僅僅要是啟動,都會創建一個新的實例壓入棧中。
比如:
如今棧的情況為:A B C D。在D這個Activity中通過Intent跳轉到D本身,那么如今的棧情況為: A B C D D 。
此時假設棧頂的D通過Intent跳轉到B,則棧情況為:A B C D D B。此時假設依次按返回鍵。D D C B A將會依次彈出棧而顯示在界面上。例如以下圖所看到的:
(2).singleTop模式:假設某個Activity的Launch mode設置成singleTop,那么當該Activity位于棧頂的時:再通過Intent跳轉到本身這個Activity,則將不會創建一個新的實例壓入棧中。
假設該Activity不位于棧頂的時候。通過Intent跳轉到本身這個Activity,則會創建一個新的實例壓入棧中。
比如:
如今棧的情況為:A B C D。D的Launch mode設置成了singleTop,那么在D中啟動Intent跳轉到D。此時棧的情況依舊為:A B C D。
可是假設此時B的模式也是singleTop,D跳轉到B,由于此時B不是位于棧頂,此時棧的情況就變成了:A B C D B。例如以下圖:
(3).singleTask模式:假設某個Activity是singleTask模式,那么Task棧中將會僅僅有一個該Activity的實例。該Activity之上的全部的Activity實例都將會被銷毀。
比如:如今棧的情況為:A B C D。B的Launch mode為singleTask。此時D通過Intent跳轉到B。則棧的情況變成了:A B。而C和D被彈出銷毀了,也就是說位于B之上的實例都被銷毀了。
例如以下圖:
(4).singleInstance模式:將Activity壓入一個新建的任務棧中。也就是說:將要被啟動的新的Activity將會被壓入一個新建的任務棧中。
比如:Task棧1的情況為:A B C。C通過Intent跳轉到D,而D的Launch mode為singleInstance。則將會新建一個Task棧2。此時Task棧1的情況還是為:A B C。
Task棧2的情況為:D。此時屏幕界面顯示D的內容,假設這時D又通過Intent跳轉到D。則Task棧2中也不會新建一個D的實例,所以兩個棧的情況也不會變化。
而假設D跳轉到C,則棧1的情況變成了:A B C C,由于C的Launch mode為standard。此時假設再按返回鍵,則棧1變成:A B C。也就是說如今界面還顯示C的內容,不是D。
例如以下圖:
注:
singleTask模式和singleInstance模式差別:
singleTask模式的activity同意其他activity成為task中的一部分 。而且它通常在task棧的根部。其他activity(必須是standard模式和singleTop模式的activity)能夠載入到這個棧上。還有一方面,singleInstance模式的activity不同意不論什么其他activity載入到這個task棧上。它是這個task中唯一的activity。假設它啟動還有一個activity,那個activity會被指引到不同的task中,這個行為就像在intent中用FLAG_ACTIVITY_NEW_TASK標記一樣。
(通常來說。manifest中用singleTask啟動模式和在intent中用FLAG_ACTIVITY_NEW_TASK標記的行為是一樣的)。
總的來說:singleTask模式能夠同意和別的Activity在一個棧中。在它之上的Activity都將會被銷毀。而singleInstance模式的Activity是單獨在一個Task中。
總結
以上是生活随笔為你收集整理的Activity的启动模式详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Unity】6.1 Unity中的C#
- 下一篇: 薛老师软考高项学员:2016年4月6日作