[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、鎖屏鍵、來電顯示等系統應用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章