Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Activity的四種啟動模式與內存洩漏

Activity的四種啟動模式與內存洩漏

編輯:關於Android編程

初看這個博文名,我都蒙蔽了,Activity的啟動模式居然能扯到內存問題,還有內存洩漏問題,
WTF!!!不要方,小司機我帶你理解和稍微深入的探討一下Activity的四種啟動模式對內存的影響和在何種情況下應該使用這四大法王之一呢?

首先我們探討一下千篇一律的Activity的四種啟動模式

不寫Demo,你就聽我說就行了。

Activity的啟動方式有四種

standard

singleTop

singleTask

singleInstance

講解啟動模式之前有必要先講解一下“任務棧”的概念;

任務棧

每個應用都有一個任務棧,是用來存放Activity的,功能類似於函數調用的棧,先後順序代表了Activity的出現順序;比如打開ActivityYa–>ActivityMai–>ActivityDai,則任務棧相應的順序圖為:
\

接著我們來設置Activity的啟動模式只需要在AndroidManifest.xml裡對應的標簽設置Android:launchMode屬性,例如:

 

\

啟動模式解析:

(1)standard:

每次激活Activity時(startActivity),都創建Activity實例,並放入任務棧;
默認模式,可以不用寫配置。在這個模式下,都會默認創建一個新的實例。因此,在這種模式下,可以有多個相同的實例,也允許多個相同Activity疊加(記住,可以允許疊加,就代表可以重復創建此Activity)

示例如下圖:
假如我點擊了Activity1中的按鈕1和按鈕2(牛逼的人在瞬間同時點擊,暫不考慮後退的問題了):
\

(2)singleTop:

如果在任務的棧頂正好存在該Activity的實例, 就重用該實例,否者就會創建新的實例並放入棧頂(即使棧中已經存在該Activity實例,只要不在棧頂,都會創建實例)。
示例如下圖:

假如我點擊了Activity1中的按鈕1和按鈕2(牛逼的人在瞬間同時點擊,暫不考慮後退的問題了):這次點擊按鈕1,因為棧頂存在Activity1,所以不會重復創建,如果不是棧頂,則會創建。
\

(3)singleTask:

如果在棧中已經有該Activity的實例,就重用該實例(會調用實例的onNewIntent())。重用時,會讓該實例回到棧頂,因此在它上面的實例將會被移除棧(銷毀)。如果棧中不存在該實例,將會創建新的實例放入棧中。

示例如下圖:

假如我點擊了Activity1中的按鈕1和按鈕2,又點了按鈕1(牛逼的人在瞬間順序點擊而不發生跳轉,暫不考慮後退的問題了):

\

(4)singleInstance:

在一個新棧中創建該Activity實例並讓多個應用共享該棧中的該Activity實例。一旦該模式的Activity的實例存在於某個棧中,任何應用再激活該Activity時都會重用該棧中的實例,其效果相當於多個應用程序共享一個應用,不管誰激活該Activity都會進入同一個應用中。

假如我點擊了Activity1中的按鈕1(只點擊了按鈕1)
\

APP1啟動App的Activity1,APP2啟動App的Activity1(在剛才的點擊基礎上),那麼APP1和APP2都會啟動任務棧2的Activity1。

先寫到這裡,明天再更新,要休息啦!

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved