Activity四種啟動模式及相關Flag

Activity有四種啟動模式

  • standard
  • singleTop
  • singleTask
  • singleInstance

standard
默認模式,每次啟動創(chuàng)建一個Activity,所屬啟動棧跟啟動它的Activity一樣。

singleTop
如果新的activity已經(jīng)位于棧頂,這個時候新建Activity會復用這個Activity而不是新建Activity。此時onCreate(),onStart()不會調(diào)用,onNewIntent方法會被調(diào)用。
其他情況下,和standard模式相同。
singleTask
啟動Activity時,會去尋找當前是否存在一個和taskAffinity名(默認是包名,可以通過Activity的android:taskAffinity屬性指定)一樣的任務棧。

  • 如果不存在,則會創(chuàng)建一個新的Task,并創(chuàng)建新的Activity實例入棧到新創(chuàng)建的Task中去。
    如果存在,則得到該任務棧,查找該任務棧中是否存在該Activity的實例:
    • 如果存在實例,則將它上面的Activity實例都出棧,然后回調(diào)啟動的Activity實例的onNewIntent方法。
    • 如果不存在該實例,則新建Activity,并入棧。

利用singleTask的這個特性,我們可以將兩個不同App中的Activity設置為相同的taskAffinity,這樣雖然在不同的應用中,但是Activity會被分配到同一個Task中去。
singleInstance
此模式是在singleTask的基礎上,再增加全局唯一性這個特性。
以singleInstance模式啟動的Activity在整個安卓系統(tǒng)中是單例的,獨占自己的一個任務棧。啟動時如果已經(jīng)存在實例(不管此實例是自己應用啟動的,還是其他應用啟動的),就復用實例,并回調(diào)onNewIntent方法 。

其他常用的影響啟動模式的Flag

如果同時設置了android:launchMode=""屬性和intent的flag屬性,后者的優(yōu)先級更高。
有跟四大啟動模式對應的Flag,但這個對應關系有點復雜,一般情況下用屬性設置就可以。
其他的常用Flag還有:

注:
startActivityForResult時,F(xiàn)lag的設置無效

參考文章:
android開發(fā)中如何結束所有的activity
基礎總結篇之三:Activity的task相關
徹底弄懂Activity四大啟動模式
Activity 啟動模式分析

應用場景

  • 重啟APP
Context.startActivity(intentFor<IndexActivity>().newTask().clearTask())
Runtime.getRuntime().exit(1)
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容