1. 程式人生 > >Android activity任務棧

Android activity任務棧

好久沒寫部落格了,腦子都秀逗了,最近比較忙,整天睡不醒,還有私信我繼續更新即時通訊的同伴們,近期可能沒戲,但是我承諾的一定完成!

任務棧,從它的名字我們就知道它有棧的特點『先進後出』,預設情況下activity的任務棧的名字就是你app的包名,當然,你也可以單獨的為你的activity指定任務棧,通過修改TaskAffinity屬性,當然不要指定成包名啦,否則跟沒指定一樣。任務棧分為前臺任務棧和後臺任務棧,後臺任務棧中的存放的是暫停狀態下的activity,前臺任務棧就是當下正在操作的任務棧啦!

下面開始啟動模式:
啟動activity可以有兩種形式,一種是設定launchMode屬性,另一種通過設定intent的flag啟動activity

launchMode

  1. standard
  2. singleTop
  3. singleTask
  4. singleInstance

standard(標準模式)

系統預設的啟動模式,啟動一個activity時,不管這個棧中存不在這個activity,系統都會為它新建一個activity例項,壓入棧裡

singleTop(棧頂複用模式)

啟動一個activity時,如果當前的activity在棧頂,那麼系統就不會再去建立一個該Activity的例項,而是呼叫棧頂Activity的onNewIntent()方法

singleTask(棧內複用模式)

這個啟動模式是專門針對於啟動其他應用的activity,只有啟動其他activity的時候才會新建一個新的任務棧。系統會建立一個新的任務,並將啟動的Activity放入這個新任務的棧底位置。但是,如果現有任務當中已經存在一個該Activity的例項了,那麼系統就不會再建立一次它的例項,而是會直接呼叫它的onNewIntent()方法

singleInstance(單例項模式)

這種啟動模式和singleTask有點相似,只不過系統不會向宣告成singleInstance的Activity所在的任務當中再新增其它Activity。也就是說,這種Activity所在的任務中始終只會有一個Activity,通過這個Activity再開啟的其它Activity也會被放入到別的任務當中

allowTaskReparenting

當把Activity的allowTaskReparenting屬性設定成true時,Activity就擁有了一個轉移所在任務的能力,當然想具有這種神器能力的前提是taskAffinity相同,感覺跟你說完這句話突然把你推到坑裡了,下面給出一個例項:app A啟動app B的activity C,按home鍵回到桌面,當你啟動app B的時候,顯示的是activity C,A啟動了C,C在A的任務棧中,但是C屬於app B並且C的taskAffinity跟B相同,所以app B啟動的時候任務棧的棧頂有個C,所以顯示的就是C了

在Intent當中,有以下幾個flag是比較常用的:

  • FLAG_ACTIVITY_NEW_TASK
  • FLAG_ACTIVITY_SINGLE_TOP
  • FLAG_ACTIVITY_CLEAR_TOP
  • FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

FLAG_ACTIVITY_NEW_TASK

與singleTask類似,但又不完全相同,被啟動的activity執行在獨立的任務棧中

FLAG_ACTIVITY_SINGLE_TOP

這個標記位和singleTop的啟動模式相同

FLAG_ACTIVITY_CLEAR_TOP

具有此標誌位的activity,當它啟動時,在同一個任務棧中所有位於它上面的activity都要出棧,這個模式一般需要和FLAG_ACTIVITY_NEW_TASK配合使用,在這種情況下被啟動的activity如果已經存在,系統就會呼叫onNewIntent。如果被啟動的activity採用的是標準模式,它和它之前的activity都要出棧

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

具有此標誌位的activity不會出現在歷史activity的列表中,它等同於
android:excludeFromRecents=”true”

清空任務棧

如何使用者將任務切換到後臺之後過了很長一段時間,系統會將這個任務中除了最底層的那個Activity之外的其它所有Activity全部清除掉。當用戶重新回到這個任務的時候,最底層的那個Activity將得到恢復。這個是系統預設的行為,因為既然過了這麼長的一段時間,使用者很有可能早就忘記了當時正在做什麼,那麼重新回到這個任務的時候,基本上應該是要去做點新的事情了。

  • alwaysRetainTaskState
  • clearTaskOnLaunch
  • finishOnTaskLaunch

alwaysRetainTaskState

如果將首頁Activity的這個屬性設定為true,任務棧所有的Activity會被繼續保留

clearTaskOnLaunch

如果將首頁Activity的這個屬性設定為true,那麼只要使用者離開了當前任務,再次返回的時候就會將最底層Activity之上的所有其它Activity全部清除掉。也就是沒次返回任務棧時都是從首頁開始

finishOnTaskLaunch

這個屬性和clearTaskOnLaunch是比較類似的,不過它不是作用於整個任務上的,而是作用於單個Activity上。如果某個Activity將這個屬性設定成true,那麼使用者一旦離開了當前任務,再次返回時這個Activity就會被清除掉

相關推薦

Android activity任務

好久沒寫部落格了,腦子都秀逗了,最近比較忙,整天睡不醒,還有私信我繼續更新即時通訊的同伴們,近期可能沒戲,但是我承諾的一定完成! 任務棧,從它的名字我們就知道它有棧的特點『先進後出』,預設情況下activity的任務棧的名字就是你app的包名,當然,你也可以單

Android零基礎入門第77節:Activity任務和啟動模式

csdn rpi activit 元素 進入 see 簡單 auto mar 通過前面的學習,Activity的基本使用都已掌握,接下來一起來學習更高級的一些內容。 Android采用任務棧(Task)的方式來管理Activity的實例。當啟動一個應用時,A

androidactivity任務

網站 默認 其中 命令 應用 認識 不存在 com systemui   activity的任務棧和啟動模式,看了各種網站和書還是感覺不得其法。於是網上找到了adb的一條命令:    adb shell dumpsys activity activities  

Android官方說明-Activity任務

應用通常包含多個Activity。每個 Activity 均應圍繞使用者可以執行的特定操作設計,並且能夠啟動其他 Activity。 例如,電子郵件應用可能有一個 Activity 顯示新郵件的列表。使用者選擇某郵件時,會開啟一個新 Activity 以檢視該郵件。 一個 Activity 甚至可以

Android複習-任務Activity啟動標記(使用標記啟動Activity時的坑)

任務棧,我們說過任務棧的概念,也知道了它的作用,但是在使用過程中會有一些坑。 指定任務棧: <activity android:name=".Main2Activity" android:launchMo

android清除任務中的所有activity

需求:想要在intent跳轉的時候將之前產生的任務棧中的所有activity銷燬 程式碼: Intent intentmain=new Intent(Login_bypw.this,MainActivity.class).setFlags(Intent.FLAG_AC

Android任務(Task)的概念

棧:先進後出 佇列:先進先出 Task 開啟一個Activity叫進棧, 關閉一個Activity出棧。 任務棧是用來維護Activity的,是用來維護使用者的操作體驗。 我們操作的Acti

Android Activity呼叫分析

導語 我們陳述一下Activity,Activity是整個應用使用者互動的核心元件,瞭解Activity的工作模式,生命週期和管理方式,是瞭解Android的基礎。 主要內容 Activity簡介 Android任務棧簡介 AndroidMa

Activity任務的管理 -----銷燬前一個相同的activity(還有一種簡單的方法實現)

需求:介面A跳轉到介面B,之後再跳轉到介面A,此時需要銷燬第一次建立的介面A,以此類推…. 思路:(在每次建立當前Activity的時候銷燬前部的activity即可,然後在添加當前activity的引用) 編寫ActivityManagement的

Android總結 - Activity任務和返回、儲存Activity的狀態

任務和返回棧   一個應用程式當中通常都會包含很多個Activity,每個Activity都應該設計成為一個具有特定的功能,並且可以讓使用者進行操作的元件。另外,Activity之間還應該是可以相互啟動的。比如,一個郵件應用中可能會包含一個用於展示郵件列表的Activity,而當用戶點選了其中某

Android 任務&activity的啟動模式

1.一個應用程式一般都是由多個activity組成的。 2.任務棧(task stack)(別名back stack後退棧) 記錄存放使用者開啟的activity的。 3.一個應用程式一被開啟系統就給他分配一個任務棧,當所有的activity都退出的時候,任

android任務activity四種啟動模式

一、android任務棧 棧:先進後出 佇列:先進先出  任務棧Task中:開啟一個Activity叫進棧 關閉一個activit出棧  任務棧是用來維護Activity的、是用來維護使用者

Android-3】Android中的任務(Task)

集合 情況下 清除 bsp 生命周期方法 任務棧 保存 sin 也會 一、Android任務棧 概述:Android中的任務棧其實就是Activity的集合,在Android中退出程序的時候必須把任務棧中的所有Activity清除出棧,此時才能安全的完全的退出程序, 任務棧

Activity任務和返回、儲存Activity的狀態

任務和返回棧   一個應用程式當中通常都會包含很多個Activity,每個Activity都應該設計成為一個具有特定的功能,並且可以讓使用者進行操作的元件。另外,Activity之間還應該是可以相互啟動的。比如,一個郵件應用中可能會包含一個用於展示郵件列表的Activity

Android群英傳》學習筆記之ActivityActivity呼叫分析

一、Activity 1、Activity形態: Active/Running 處於棧頂,可互動。 Paused 被遮擋但未被完全覆蓋,失去焦點,不可互動。 Stopped 被完全覆蓋,但保持了所有狀

Activity的啟動模式、任務以及使用場景

Activity的啟動模式、任務棧以及使用場景 目錄 Activity 生命週期 任務棧 啟動模式 Intent Flag taskAffinity屬性 一、 Activity作為最常用的四大元件之一,肯定都

android獲取當前頂的activity

在Application的onCreate方法中: @Override public void onCreate() { registerActivityLifecycleCallbacks(new ActivityLifecycleCallback

安卓四大元件 之 Activity任務和回收(Tasks and Back Stack)

本文摘要 |---Saving Activity State   |---Managing Tasks     |---Defining launch modes     |---Handling affinities     |---Clearing the back s

Activity 啟動模式及任務管理

什麼是任務棧 Android系統中,Activity代表一個個視窗,負責直接和使用者進行互動。一個應用包含很多的視窗即Activities,同時可以從這個應用去開啟存在於其他應用中的activities例如從Photo應用要分享一張照片到朋友圈,則會通過當前的

Activity啟動模式&任務

Activity啟動模式設定:         <activity android:name=".MainActivity" android:launchMode="standard" /> Activity的四種啟動模式: 1. standard