AMS中Activity棧相關(guān)概念

對(duì)Android開發(fā),Activity棧是很重要的概念,在AMS中任務(wù)棧用了很多抽象來描述,這里簡(jiǎn)單學(xué)習(xí)下。

ActivityStack、TaskRecord、 ActivityRecord
這三個(gè)都是AMS中Activity 棧相關(guān)的模型,

ActivityStack

為了讓這許多Activity協(xié)同工作而不至于產(chǎn)生混亂,Android平臺(tái)設(shè)計(jì)了ActivityStack機(jī)制用于管理Activity,其遵循先進(jìn)后出的原則,系統(tǒng)總是顯示位于棧頂?shù)腁ctivity,從邏輯上將,位于棧頂?shù)腁ctivity也就是最后打開的Activity, 這也是符合邏輯的。
在操作應(yīng)用程序時(shí),每次啟動(dòng)新的Activity,都會(huì)將此壓入Activity Stack,當(dāng)用戶執(zhí)行返回操作時(shí),移除Activity Stack頂上的Activity,這樣就實(shí)現(xiàn)了返回上一個(gè)Activty的功能。直到用戶一直返回到Home Screen,這時(shí)候可以理解為移除了Activity Stack所有的Activity,這個(gè)Activity Stack不再存在,應(yīng)用程序也結(jié)束了運(yùn)行.

共五種:

  1. HOME_STACK_ID
    Home應(yīng)用以及recents app所在的棧
  2. FULLSCREEN_WORKSPACE_STACK_ID
    一般應(yīng)用所在的棧
  3. FREEFORM_WORKSPACE_STACK_ID
    類似桌面操作系統(tǒng)
  4. DOCKED_STACK_ID
  5. PINNED_STACK_ID
    畫中畫棧

TaskRecord

task是指將相關(guān)的Activity組合到一起,以Activity Stack的方式進(jìn)行管理。大部分場(chǎng)景上,一個(gè)“應(yīng)用程序”就是一個(gè)Task,但其實(shí),一個(gè)Task是可以有一個(gè)或多個(gè)Android Application組成的,一個(gè)應(yīng)用也可以有多個(gè)task。而TaskRecord就是在ams中task的描述類
taskAffinity:
可以翻譯為任務(wù)相關(guān)性。這個(gè)參數(shù)標(biāo)識(shí)了一個(gè) Activity 所需要的任務(wù)棧的名字,默認(rèn)情況下,所有 Activity 所需的任務(wù)棧的名字為應(yīng)用的包名,當(dāng) Activity 設(shè)置了 taskAffinity 屬性,那么這個(gè) Activity 在被創(chuàng)建時(shí)就會(huì)運(yùn)行在和 taskAffinity 名字相同的任務(wù)棧中,如果沒有,則新建 taskAffinity 指定的任務(wù)棧,并將 Activity 放入該棧中。另外,taskAffinity 屬性主要和 singleTask 或者 allowTaskReparenting 屬性配對(duì)使用,在其他情況下沒有意義。

        <activity android:name="com.example.myapplication.Activity1"/>
        <activity android:name="com.example.myapplication.Activity2"
                  android:launchMode="singleTask"
                  android:taskAffinity="com.example.t2"/>

上面這個(gè)例子中Activity1打開Activity2會(huì)在兩個(gè)task里,而去掉Activity2的singletask或taskaffinity就還是會(huì)在一個(gè)task里

ActivityRecord

ams中activity的描述類,包含了activity在manifest中的這個(gè)配置、在系統(tǒng)中的狀態(tài)等。
簡(jiǎn)單來說在ams里,一個(gè)ActivityStack管理TaskRecord,而每個(gè)TaskRecord又管理了多個(gè)ActivityRecord,當(dāng)然由于AMS及其復(fù)雜,ActivityStack中也有很多地方直接操作ActivityRecord

AMS中其他Activity相關(guān)類

ActivityDisplay
描述Display的類,簡(jiǎn)單的說Display可以看做物理屏幕的一個(gè)抽象,ActivityStack也是歸屬于ActivityDisplay的
ActivityStackSupervisor
顧名思義,就是ActivityStack的管理者,AMS中對(duì)ActivityStack、TaskRecord、ActivityRecord的操作主要由其負(fù)責(zé)
ActivityStarter
負(fù)責(zé)了Activity啟動(dòng)的很多邏輯

未完待續(xù)。。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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