android的activity任務棧

來源:互聯網
上載者:User

標籤:body   有一個   init   模式   etop   pre   結構   shel   後台   

  activity的任務棧和啟動模式,看了各種網站和書還是感覺不得其法。於是網上找到了adb的一條命令:

  

    adb shell dumpsys activity activities

   這條語句會列出手機中存在的任務棧。

  1、清空所有背景工作,運行了一個自己寫的測試應用,發現任務棧的結構如下:

    

Stack #1:    Task id #74        affinity=包名        Activities=[XXX]    Task id #73        affinity=包名        Activities=[XXX]Stack #0:    Task id #1        affinity=com.huawei.android.launcher        Activities=[[ActivityRecord{3d2a088 u0 com.huawei.android.launcher/.unihome.UniHomeLauncher t1}]
   Task id #3
     affinity=com.android.systemui
     Activities=[ActivityRecord{e8167f6 u0 com.android.systemui/.recents.RecentsActivity t3}]


  android中的所謂任務棧,其實有兩層:任務棧包含Task,Task包含Activity。


然後修改Activity的啟動模式進行測試(自己測試的,不知道是不是不同手機會有不同結果):
  1、affinity就是我們使用android:taskAffinity設定的值。不同的Task是可以重複的,例如我們使用singleInstance啟動模式時,activity單獨佔一個Task,Task的affinity可能和和相同進程中其他activitiy啟動的Task一致,但是Task的id是不一致的。
  2、launchMode為預設的時候,activity會運行在啟動它的task中,不論兩個activity是不是同一個應用。
  3、launchMode為singleInstance時,不論是不是同一個應用,都會是一個單獨的Task,且其中只有一個Activity,
  4、launchMode為singleTask時,會依據affinity找到對應的Task,不存在則建立,存在則切換到該Task。然後看有沒有該activity執行個體,有則清空上面的顯示,沒有則建立。

個人理解:
  1、Stack只有兩個,一個是系統的Launcher佔用,一個是我們啟動的應用佔用的。點擊Home鍵其實是這兩個Stack交替。
  2、每個Activity都有一個affinity,預設會是所在應用的包名。
  3、啟動一個Activity,首先有一個當前的Task,然後依據啟動模式,選擇是在當前Task添加,還是尋找新的Task。
  4、 standard:建立執行個體。當前Task能添加則添加。如:當前Task中的Activity如果是singleInstance則會依據affinity尋找對應Task添加。
    singleTop:和standard一樣的步驟找到可添加的Task,然後看頂部的Activity是不是要啟動的Activity。
    singleTask:依據affinity找到可添加的Task,然後看Task中是不是有要啟動的Activity執行個體。
    singleInstance:依據affinity尋找,是否存在只有要啟動的activity的執行個體的Task,切換到該Task。

   主要是對任務棧的機構有了一個新的認識。

android的activity任務棧

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.