Android中Activity啟動模式詳解

來源:互聯網
上載者:User

  在Android中每個介面都是一個Activity,切換介面操作其實是多個不同Activity之間的執行個體化操作。在Android中Activity的啟動模式決定了Activity的啟動運行方式。

  Android總Activity的啟動模式分為四種:

Activity啟動模式設定:        <activity android:name=".MainActivity" android:launchMode="standard" />Activity的四種啟動模式:    1. standard        模式啟動模式,每次啟用Activity時都會建立Activity,並放入任務棧中。    2. singleTop        如果在任務的棧頂正好存在該Activity的執行個體, 就重用該執行個體,否者就會建立新的執行個體並放入棧頂(即使棧中已經存在該Activity執行個體,只要不在棧頂,都會建立執行個體)。    3. singleTask        如果在棧中已經有該Activity的執行個體,就重用該執行個體(會調用執行個體的onNewIntent())。重用時,會讓該執行個體回到棧頂,因此在它上面的執行個體將會被移除棧。如果棧中不存在該執行個體,將會建立新的執行個體放入棧中。     4. singleInstance        在一個新棧中建立該Activity執行個體,並讓多個應用共用改棧中的該Activity執行個體。一旦改模式的Activity的執行個體存在於某個棧中,任何應用再啟用改Activity時都會重用該棧中的執行個體,其效果相當於多個應用程式共用一個應用,不管誰啟用該Activity都會進入同一個應用中。

 

  其中standard是系統預設的啟動模式。

 

  下面通過執行個體來示範standard的運行機制:

 1 private TextView text_show; 2     private Button btn_mode; 3      4     @Override 5     public void onCreate(Bundle savedInstanceState) { 6         super.onCreate(savedInstanceState); 7         setContentView(R.layout.activity_main); 8          9         text_show = (TextView) this.findViewById(R.id.text_show);10         11         text_show.setText(this.toString());12         13         btn_mode = (Button) this.findViewById(R.id.btn_mode);14         15     }16     
    //按鈕單擊事件17 public void LaunchStandard(View v){18 startActivity(new Intent(this,MainActivity.class));19 20 text_show.setText(this.toString());21 }

  初始化介面如下:

  

  當點擊按鈕時,會建立新的Activity,通過TextView@後16進位數的顯示即可看出,點擊兩次分別介面如下:

  

   

  

  此時,我們分析棧內部的運行機制:

   (依次從棧頂向上)

 

  因此,這種Standard模式是每次都會建立新的Activity對象,當點擊返回按鈕時,他會將棧頂(當前Activity)消滅,然後跳到下一層,例如如果現在Activity是44ed8c50,那麼當我們點擊返回時Activity會變為44f28a48,不過此時在這個Activity中再次點擊按鈕建立對象時,它會另外建立新的Activity對象,這種模式可能大多數情況下不是我們需要的,因為對系統效能的消耗過大。

  下面我們介紹兩種能使用當前棧中Activity的啟動模式:

  2. singleTop

    從上面的解釋中即可知道,在每次使用新的Activity時會自動檢測棧頂的當前Activity是否是需要引用的Activity,如果是則直接引用此Activity,而不會建立新的Activity。

    我們在剛才的介面中加入一個"啟動singletop模式"按鈕,當點擊時出現我們建立的singletop中,在Activity singletop中有一個按鈕,啟動singletop模式,表示啟動當前Activity,由於我們在資訊清單檔中配置Activity的啟動模式為singleTop,因此此時不會再建立而是利用當前棧頂的singleTop Activity:

     <activity            android:name=".SingleTopActivity"            android:label="@string/singletop"            android:launchMode="singleTop" >        </activity>

 

 

    介面初始化:

      

    點擊"啟動singleTop模式"按鈕:

          

  我們分析它的運行機制,可知,當程式運行到此時,棧中的資料形式為:

    

    當我們在上面介面中點擊"啟動singleTop模式"按鈕時,由於此Activity設定的啟動模式為singleTop,因此它首先會檢測當前棧頂是否為我們要請求的Activity對象,經驗證成立,因此它不會建立新的Activity,而是引用當前棧頂的Activity。

       

    雖然它不會建立新的Activity對象,不過它每次回調用onNewIntent()方法:

1 @Override2     protected void onNewIntent(Intent intent) {3         // TODO Auto-generated method stub4         super.onNewIntent(intent);5         6         Toast.makeText(this, new Date().toString(), 1).show();7     }

 

    我們為此方法編寫代碼輸出當前日期,則在每次點擊上面按鈕時會輸出當前日期。

 

  3.singleTask

    此啟動模式和singleTop在名字上即可看出區別,即singleTop每次只檢測當前棧頂的Activity是否是我們需要請求建立的,而singleTask則會檢測棧中全部的Activity對象,從上向下,如果檢測到是我們所請求的則會消滅此Activity對象上面的對象,直接把檢測到的我們需要的Activity置為棧頂。

    我們建立一個SingleTaskActivity,此介面中包含一個啟動MainActivity和啟動SingleTaskActivity按鈕。

  初始化:

    

  點擊"啟動singleTask模式"按鈕:

    

  在此介面中點擊第二個按鈕"啟動singleTask模式"按鈕,根據定義會檢測當前棧中是否有此Activity對象,因此顯示的還是當前的Activity,不會重新建立;

  再點擊"啟動Standard模式"按鈕,由於MainActivity的啟動模式為standard,所以在此會重新建立一個MainActivity對象:

    

  此時棧中資料格式為:

    

  當在上面介面中點擊"啟動singleTask模式"按鈕時,由於檢測到當期棧中第二個為我們要建立的Activity,會將最上面的MainActivity消滅,然後將SingleTaskActivity設定為棧頂:

    

 

  4.SingleInstance

    此啟動模式和我們使用的瀏覽器工作原理類似,我們都知道在多個程式中訪問瀏覽器時,如果當前瀏覽器沒有開啟,則開啟瀏覽器,否則會在當前開啟的瀏覽器中訪問。此模式會節省大量的系統資源,因為他能保證要請求的Activity對象在當前的棧中只存在一個。

 

    

    上面即為Android中的四種啟動模式,我們在開發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.