天天看點

輕松了解Activity四種啟動模式

Activity四種啟動模式

一、啟動模式介紹

   啟動模式簡單地說就是Activity啟動時的政策,在AndroidManifest.xml中的标簽的android:launchMode屬性設定;

   啟動模式有4種,分别為standard、singleTop、singleTask、singleInstance;

二、分别詳細介紹每種啟動模式

  1. standard

     standard模式是預設的啟動模式,不用為配置android:launchMode屬性即可,當然也可以指定值為standard。standard模式所啟動的Activity都是在同一個task容器棧下,不會重新建立新的task容器棧。先壓入棧的Activity執行個體按順序入棧底,後入棧在棧頂,處于棧的頂部Activity執行個體處于活動狀态,其他處于非活動狀态。按實體傳回鍵,退出目前所處活動狀态Activity視窗,這樣就會從task容器棧中彈出,顯示在手機主螢幕上,進而,由非活動狀态轉換成活動的狀态。其次,standard容器棧可能會存在着相同的Activity執行個體,隻要調用一次startActivity方法,就會建立目标Activity執行個體對象壓入task容器棧。圖解如下:

    輕松了解Activity四種啟動模式
  2. singleTop

     AndroidManifest.xml檔案中launchmode屬性配置singletop,那麼啟動執行個體化Activity,如果task容器棧頂存在已經激活的Activity執行個體,就會重用目前棧頂的Activity執行個體,不會再重新去執行個體化Activity對象。善于思考的朋友可能會問,如果要啟動的目标Activity已經有執行個體化對象存在task容器棧裡面,隻是現在不處于棧頂,這樣情況下,singletop啟動模式會建立目标Activity執行個體嗎?答案是肯定的。要啟動的目标Activity執行個體正好處于棧頂,才能重用該執行個體,其他情況必須建立新執行個體。圖解如下:

     

    輕松了解Activity四種啟動模式
     
  3. singleTask

     singletask模式,特别需要注意了。啟動的目标Activity執行個體如果已經存在task容器棧中,不管目前執行個體處于棧的任何位置,是棧頂也好,棧底也好,還是處于棧中間,隻要目标Activity執行個體處于task容器棧中,都可以重用該Activity執行個體對象,然後,把處于該Activity執行個體對象上面全部Activity執行個體清除掉,并且,task容器棧中永遠隻有唯一執行個體對象,不會存在兩個相同的執行個體對象。是以,如果你想你的應用不管怎麼啟動目标Activity,都隻有唯一一個執行個體對象,就使用這種啟動模式。一般在實際開發的過程中,會把HomeActivity設定成為SingleTask,也就是所謂的回到首頁,并且會在HomeAcitivity的onNewIntent方法中決定跳轉哪個Fragement。圖解如下:

     

     

    輕松了解Activity四種啟動模式
     
  4. singleInstance

     singleInstance啟動模式,簡單說就是可以共享某個Activity。比如,應用1要啟動Activity C,而應用2的任務容器棧中建立了Activity C執行個體,應用1則不需要建立Activity C執行個體,直接可以公用Activity C執行個體。圖解如下:

     

     

    輕松了解Activity四種啟動模式

三、總結

  總之,Android四大啟動模式相當簡單。預設standard模式,他是task容器棧可能存在相同的Activity執行個體;singletop模式下,重用棧頂Activity執行個體,棧頂不存在,則建立新的Activity執行個體,該模式下有可能存在相同Activity執行個體;singletask模式,task容器棧存在目标Activity執行個體,則重用該執行個體,task容器棧永遠隻有唯一activity執行個體,并且,其一是Activity執行個體被清除掉。singleinstance模式,不同應用可以共享Activity執行個體,并且是處于不同容器棧中。而在實際開發中用的比較多的就是singletask。