Activity 的啟動模式有4種,分別是 standard,singleTop.singleTask.singleInstance锦募≈嘌可以在
AndroidMainifest.xml 文件中指定每一個 Activity 的啟動模式迟几。一個 Android 應(yīng)用一般都會有多個 Activity呆贿,系統(tǒng)會通過任務(wù)棧管理這些 Activity嚷兔,棧是一種后進先出的集合,當(dāng)前的Activity 就在棧頂做入,按返回鍵冒晰,棧頂 Activity 就會退出。Activity 啟動模式不同竟块,系統(tǒng)通過任務(wù)棧管理 Activity 壶运。
1. Standard 模式
來了就創(chuàng)建
Standard 模式是 Android 的默認(rèn)啟動模式,你不在配置文件中做任何設(shè)置彩郊,那么這個 Activity 就是 Standard 模式前弯,這種模式下,Activity 可以有多個實例秫逝,每次啟動 Activity,無論任務(wù)棧中是否已經(jīng)有這個 Activity 的實例询枚,系統(tǒng)都會創(chuàng)建一個新的 Activity 實例违帆。
應(yīng)用場景:默認(rèn)模式,大部分情況下金蜀,都應(yīng)該使用這種模式刷后。
2. SingleTop 模式
棧頂單例
SingleTop 模式和 Standard 模式非常相似,主要區(qū)別就是當(dāng)一個 SingleTop 模式的 Activity 已經(jīng)位于任務(wù)棧棧頂渊抄,再去啟動它時尝胆,不會再創(chuàng)建新的實例,如果不位于棧頂护桦,就會創(chuàng)建新的實例含衔。
啟動相同 Activity,不會調(diào)用 onCreat(),但會調(diào)用 onNewIntent (可在此處處理相應(yīng)邏輯)贪染,我們可以在這個函數(shù)做相應(yīng)的處理缓呛。
應(yīng)用場景:避免多次啟動 Activity。
3. SingleTask 模式
任務(wù)棧單例
SingleTask 模式的 Activity 在同一個 Task 內(nèi)只有一個實例杭隙,如果 Activity 已經(jīng)位于棧頂哟绊,系統(tǒng)將不會創(chuàng)建新的實例,和 SingleTop 模式一樣痰憎。但 Activity 已經(jīng)存在但不位于與棧頂時票髓,系統(tǒng)就會把該 Activity 移到棧頂,并把它上面的 Activity 出棧铣耘。并且會調(diào)用 onNewIntent()炬称,方便業(yè)務(wù)邏輯處理。
應(yīng)用場景:首頁可以使用該模式涡拘。
4. SingleInstance 模式
獨棧單例
SingleInstance 模式也是單例的玲躯,但和 SingleTask 不同,SingleTask 只是任務(wù)棧內(nèi)單例鳄乏,系統(tǒng)里是可以有多個 SingleTask Activity 實例的跷车,而 SingleInstance Activity 在整個系統(tǒng)里只有一個實例,啟動一 SingleInstance Activity時橱野,系統(tǒng)會啟動一個新的任務(wù)棧朽缴,而且這個任務(wù)棧只有他一個 Activity。
SingleInstance 模式并不常用水援,如果我們把一個 Activity 設(shè)置為 SingleInstance 模式密强,你會發(fā)現(xiàn)它啟動時會慢一些,切換效果不好蜗元,影響用戶體驗或渤。
應(yīng)用場景:它往往用于多個應(yīng)用之間,例如一個電視 launcher 里的 Activity奕扣,通過遙控器某個鍵在任何情況可以啟動薪鹦,這個 Activity 就可以設(shè)置為 SingleInstance 模式,當(dāng)某應(yīng)用中按鍵啟動這個 Activity惯豆,處理完后按返回鍵池磁,就會回到之前啟動它的應(yīng)用,不影響用戶體驗楷兽。