Activity之四大啟動模式
Activity啟動模式有四種,分別是:
standard(預設模式)
singleTop(棧頂模式)
singleTask(棧內複用模式)
singleInstance(全域性唯一模式)
在正式講解之前我們先講一下任務棧
什麼是任務棧?
任務棧Task,是一種用來放置Activity例項的容器,他是以棧的形式進行盛放,也就是所謂的先進後出,主要有2個基本操作:壓棧和出棧,其所存放的Activity是不支援重新排序的,只能根據壓棧和出棧操作更改Activity的順序。
啟動一個Application的時候,系統會為它預設建立一個對應的Task,用來放置根Activity。預設啟動Activity會放在同一個Task中,新啟動的Activity會被壓入啟動它的那個Activity的棧中,並且顯示它。當用戶按下回退鍵時,這個Activity就會被彈出棧,按下Home鍵回到桌面,再啟動另一個應用,這時候之前那個Task就被移到後臺,成為後臺任務棧,而剛啟動的那個Task就被調到前臺,成為前臺任務棧,Android系統顯示的就是前臺任務棧中的Top例項Activity。
任務棧的作用
棧是一個先進後出的線性表,根據Activity在當前棧結構中的位置,來決定該Activity的狀態。正常情況下,當一個Activity啟動了另一個Activity的時候,新啟動的Activity就會置於任務棧的頂端,並處於活動狀態,而啟動它的Activity雖然成功身退,但依然保留在任務棧中,處於停止狀態,當用戶按下返回鍵或者呼叫finish()方法時,系統會移除頂部Activity,讓後面的Activity恢復活動狀態。當然,世界不可能一直這麼“和諧”,可以給Activity設定一些“特權”,來打破這種“和諧”的模式,這種特權。這就是activity的啟動模式
接下來我們一一講解這四種模式
standard
standard模式是每次都會建立新的Activity物件,當點選返回按鈕時,他會將棧頂(當前Activity)消滅,然後跳到下一層,不過此時在這個Activity中再次點選按鈕建立物件時,它會另外建立新的Activity物件,這種模式可能大多數情況下不是我們需要的,因為對系統性能的消耗過大。
singleTop
singleTop模式在每次啟動的時候會檢測棧頂是不是要啟動的activity,如果是,則不建立新的activity;否則,建立新的activity
singleTask
singleTask模式在每次啟動的時候檢測棧中是否存在將要啟動的activity,如果存在,則會讓要啟動的activity之上的元素出棧,銷燬要啟動的activity之上的activity;如果不存在,創建出新的activity
singleInstance
singleInstance模式類似於瀏覽器,singleInstance模式在每次啟動的時候會檢測棧中是否存在將要啟動的activity,如果存在,則將要啟動的activity放到棧頂,確保至多有一個,與singleInstance不同的是,singleInstance模式不會銷燬要啟動的activity之上的activity。
如何配置Activity的啟動模式?
1.在androidmainfest.xml中的activity節點中
<activity android:name=".MainActivity" android:launchMode="standard"/>
2.在intent的flag設定