1. 程式人生 > >[Android]基礎--Activity的四種啟動模式

[Android]基礎--Activity的四種啟動模式

Activity的管理機制

Android的管理主要是通過Activity棧來進行的。當一個Activity啟動時,系統根據其配置或呼叫的方式,將Activity壓入一個特定的棧中,系統處於執行(Running or Resumed)狀態。當按Back鍵或觸發finish()方法時,Activity會從棧中被壓出,進而被銷燬,當有新的Activity壓入棧時, 如果原Activity仍然可見,則原Activity的狀態將轉變為暫停(Paused)狀態,如果原Activity完全被遮擋,那麼其狀態將轉變為 停止(Stopped)。

在實際開發中,應根據特定的需求為每個Activity制定恰當的啟動模式。Activityde 的啟動模式有四種。分別是standard、singleTop、singleTask和singleInstance。在AndroidManifest.xml中,通過<activity>標籤的android:launchMode屬性可以設定啟動模式。

任務棧

任務棧是用於只存放一組應用activity的集合。任務棧只存放四大元件中的activity;使用者看到的介面是被放置在任務棧當中的。
Activity的管理是採用任務棧的形式。任務棧採用“後進先出”的棧結構。每按一次Back鍵,就有一個Activity出棧。

標準模式(standard)
每次啟用Activity時(startActivity),都建立Activity例項,並放入任務棧;

棧頂複用模式(singleTop)
如果在任務的棧頂正好存在該Activity的例項, 就重用該例項,否者就會建立新的例項並放入棧頂(即使棧中已經存在該Activity例項,只要不在棧頂,都會建立例項)。

棧內複用模式(singleTask)
如果在棧中已經有該Activity的例項,就重用該例項(會呼叫例項的onNewIntent())。重用時,會讓該例項回到棧頂,因此在它上面的例項將會被移除棧。如果棧中不存在該例項,將會建立新的例項放入棧中。

堆內單例(singleInstance)
整個手機作業系統裡面只有一個例項存在就是記憶體單例;
它具備所有singleTask的特點,唯一不同的是,它是存在於另一個任務棧中,且這個任務棧只有這個例項。上面的三種模式都存在於同一個任務棧中,而這種模式則是存在於另一個任務棧中。
Activity四種啟動模式常見使用場景:

  1. standard     mainfest中沒有配置就預設標準模式
  2. singleTop     登入頁面、WXPayEntryActivity、WXEntryActivity 、推送通知欄
  3. singleTask     程式模組邏輯入口:主頁面(Fragment的containerActivity)、WebView頁面、掃一掃頁面
  4. singleInstance     系統Launcher、鎖屏鍵、來電顯示等系統應用