Android activity任務棧
好久沒寫部落格了,腦子都秀逗了,最近比較忙,整天睡不醒,還有私信我繼續更新即時通訊的同伴們,近期可能沒戲,但是我承諾的一定完成!
任務棧,從它的名字我們就知道它有棧的特點『先進後出』,預設情況下activity的任務棧的名字就是你app的包名,當然,你也可以單獨的為你的activity指定任務棧,通過修改TaskAffinity屬性,當然不要指定成包名啦,否則跟沒指定一樣。任務棧分為前臺任務棧和後臺任務棧,後臺任務棧中的存放的是暫停狀態下的activity,前臺任務棧就是當下正在操作的任務棧啦!
下面開始啟動模式:
啟動activity可以有兩種形式,一種是設定launchMode屬性,另一種通過設定intent的flag啟動activity
launchMode
- standard
- singleTop
- singleTask
- 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
android的activity任務棧
網站 默認 其中 命令 應用 認識 不存在 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群英傳》學習筆記之Activity與Activity呼叫棧分析
一、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