Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android activity的四種啟動模式

android activity的四種啟動模式

編輯:關於Android編程

在AndroidManifest.xml中設置Activity啟動模式:

1.standard

每次激活activity,都會創建activity,並放入任務棧中。這是系統默認的啟動模式。
Standard模式是每次都會創建新的Activity對象,當點擊返回按鈕時,他會將棧頂(當前Activity)消滅,然後跳到下一層,不過此時在這個Activity中再次點擊按鈕創建對象時,它會另外創建新的Activity對象,這種模式可能大多數情況下不是我們需要的,因為對系統性能的消耗過大。

2.singleTop

如果在任務的棧頂正好存在該Activity的實例, 就重用該實例,否者就會創建新的實例並放入棧頂(即使棧中已經存在該Activity實例,只要不在棧頂,都會創建實例)。
在每次使用新的Activity時會自動檢測棧頂的當前Activity是否是需要引用的Activity,如果是則直接引用此Activity,而不會創建新的Activity;當它不需要創建新的Activity對象時,它會調用onNewIntent()方法。

避免一個糟糕的用戶體驗,如果這個界面已經被打開且在任務棧的棧頂,就不會重復開啟了

應用場景 :

singleTop的應用場景很多,一般適用於可以復用而又有多個開啟渠道的Activity,避免當一個Activity已經開啟並獲得焦點後,再次重復開啟。比如說Android系統浏覽器的書簽頁面,就是一個singleTop模式的Activity。Android的浏覽器是基於WebKit內核編寫的,它是支持JavaScript腳本語言的,可以通過JavaScript腳本設置浏覽器書簽,這樣如果存在多個頁面存在保存書簽的JavaScript腳本,就會導致書簽頁面被多次開啟,所以書簽頁面被設置為singleTop模式,這樣可以避免在保存多個書簽的時候重復開啟書簽頁面。

3.singleTask

如果在棧中已經有該Activity的實例,就重用該實例(會調用實例的onNewIntent())。重用時,會讓該實例回到棧頂,因此在它上面的實例將會被移除棧。如果棧中不存在該實例,將會創建新的實例放入棧中。
此啟動模式和singleTop在名字上即可看出區別,即singleTop每次只檢測當前棧頂的Activity是否是我們需要請求創建的,而singleTask則會檢測棧中全部的Activity對象,從上向下,如果檢測到是我們所請求的則會消滅此Activity對象上面的對象,直接把檢測到的我們需要的Activity置為棧頂。

設置了”singleTask”啟動模式的Activity,它在啟動的時候,會先在系統中查找屬性值affinity等於它的屬性值taskAffinity的任務存在;如果存在這樣的任務,它就會在這個任務中啟動,否則就會在新任務中啟動。因此,如果我們想要設置了”singleTask”啟動模式的Activity在新的任務中啟動,就要為它設置一個獨立的taskAffinity屬性值。

應用場景:
浏覽器:底層使用的是webkit c 內核,初始化一次需要申請很多的內存資源,占用cpu時間,所以使用singletask,保證在任務棧裡只會有一個實例存在

singleTask的的適用場景為一般程序的主頁面,當回退到主頁面的時候,清除BackStack中,它之上的所有Activity,這樣避免程序導航邏輯的混亂。比如Android系統的浏覽器的主頁面,就是singleTask模式的,上面提到,android下浏覽器是Webkit內核的,它是由C語言編寫的,而每次打開新的網頁如果重新開啟一個Activity,是非常耗費系統資源的(需要解析HTML、Script腳本),所以被設置為singleTask模式,這樣在浏覽器應用裡,無論打開多少個頁面,使用的都是同一個Activity。所以以後如果存在很耗費系統資源的Activity,可以考慮使用singleTask開啟模式

4.singleInstance(相當於實例)

在一個新棧中創建該Activity實例,並讓多個應用共享該棧中的該Activity實例。一旦該模式的Activity的實例存在於某個棧中,任何應用再激活該Activity時都會重用該棧中的實例,其效果相當於多個應用程序共享一個應用,不管誰激活該Activity都會進入同一個應用中。
此啟動模式和我們使用的浏覽器工作原理類似,我們都知道在多個程序中訪問浏覽器時,如果當前浏覽器沒有打開,則打開浏覽器,否則會在當前打開的浏覽器中訪問。此模式會節省大量的系統資源,因為他能保證要請求的Activity對象在當前的棧中只存在一個。
Android系統的來電頁面,多次來電均使用的是一個Activity。

注意:Android的啟動模式跟進程沒有關系,進程是進程, 任務棧是管理Activity的

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