activity 的屬性android:taskAffinity和android:allowTask

1.清單文件中,activity 的屬性
android

android:allowTaskReparenting web

這個屬性用於設定Activity可以從啓動它的任務中轉移到另外一個與啓動它的任務有親緣關係的任務中,轉移時機是在這個有親緣關係的任務被帶到前臺的時候。若是設置了true,則可以轉移,若是設置了false,則這個Activity必需要保留在啓動它的那個任務中。 瀏覽器

若是這個屬性沒有設置,那麼其對應的<application>元素的allowTaskReparenting屬性值就會應用到這個Activity上。它的默認值是false app

一般,當Activity被啓動時,它會跟啓動它的任務關聯,並它的整個生命週期都會保持在那個任務中。可是當Activity的當前任務不在顯示時,可使用這個屬性來強制Activity轉移到與當前任務有親緣關係的任務中。這種狀況的典型應用是把應用程序的Activity轉移到與這個應用程序相關聯的主任務中。 函數

例如,若是一個電子郵件消息中包含了一個網頁的連接,點擊這個連接會啓動一個顯示這個網頁的Activity。可是,由e-mail任務部分啓動的這個Activity是由瀏覽器應用程序定義的。若是把它放到瀏覽器的任務中,那麼在瀏覽器下次啓動到前臺時,這個網頁會被顯示,而且在e-mail任務再次顯示時,這個Activity有會消失。 spa

Activity的親緣關係是由taskAffinity屬性定義的。經過讀取任務的根Activity的親緣關係來判斷任務的親緣關係。所以,經過定義,任務中的根Activity與任務有着相同的親緣關係。所以帶有singleTasksingleInstance啓動模式的Activity只能是任務的根節點,Activity的任務歸屬受限於standardsingleTop模式。 orm

經典理解:
生命週期

就是說,一個activity1原來屬於task1,可是若是task2啓動起來的話,activity1可能再也不屬於task1了,轉而投奔task2去了。
固然前提條件是allowTaskReparenting,還有affinity設置
有點像,你撿到一條狗,在家裏餵養幾天以爲不錯,當本身家的了;可是忽然有一天他的主人找上門來了,小狗仍是乖乖和主人走了。。。
it

或者: io

    用法

是否容許activity更換從屬的任務,好比從短信息任務 切換到瀏覽器任務。

用來標記Activity可否從啓動的Task移動到有着affinity的Task(當這個Task進入到前臺時)——「true」,表示能移動,「false」,表示它必須呆在啓動時呆在的那個Task裏。

若是這個特性沒有被設定,設定到元素上的allowTaskReparenting特性的值會應用到Activity上。默認值爲「false」。

通常來講,當Activity啓動後,它就與啓動它的Task關聯,而且在那裏耗盡它的整個生命週期。噹噹前的Task再也不顯示時,你可使用這個特性來強制Activity移動到有着affinity的Task中。典型用法是:把一個應用程序的Activity移到另外一個應用程序的主Task中。
例如,若是e-mail中包含一個web頁的連接,點擊它就會啓動一個Activity來顯示這個頁面。這個Activity是由Browser應用程序定義的,可是,如今它做爲e-mail Task的一部分。若是它從新宿主到Browser Task裏,當Browser下一次進入到前臺時,它就能被看見,而且,當e-mail Task再次進入前臺時,就看不到它了。
Actvity的affinity是由taskAffinity特性定義的。Task的affinity是經過讀取根Activity的affinity 決定。所以,根據定義,根Activity老是位於相同affinity的Task裏。因爲啓動模式爲「singleTask」和 「singleInstance」的Activity只能位於Task的底部,所以,從新宿主只能限於「standard」和「singleTop」模式。


android:alwaysRetainTaskState

這個屬性用於設置Activity所屬的任務狀態是否始終由系統來維護。若是設置爲true,則由系統來維護狀態,設置爲false,那麼在某些狀況下,系統會容許重設任務的初始狀態。默認值是false。這個屬性只對任務根節點的Activity有意義,其餘全部的Activity都會被忽略。

一般,在某些狀況中,當用戶從主屏中從新啓動一個任務時,系統會先清除任務(從堆棧中刪除根節點Activity之上的全部Activity)。

可是,當這個屬性被設置爲true時,用戶會始終返回到這個任務的最後狀態,而無論中間經歷了哪些操做。這樣作是有好處的,例如,Web瀏覽器的應用就會保留不少用戶不想丟失的狀態,如多個被打開的標籤頁。


經典理解:

這個屬性用來標記應用的task是否保持原來的狀態,「true」表示老是保持,「false」表示不可以保證,默認爲「false」。此屬性只對task的根Activity起做用,其餘的Activity都會被忽略。 默認狀況下,若是一個應用在後臺呆的過久例如30分鐘,用戶從主選單再次選擇該應用時,系統就會對該應用的task進行清理,除了根Activity,其餘Activity都會被清除出棧,可是若是在根Activity中設置了此屬性以後,用戶再次啓動應用時,仍然能夠看到上一次操做的界面。 這個屬性對於一些應用很是有用,例如Browser應用程序,有不少狀態,好比打開不少的tab,用戶不想丟失這些狀態,使用這個屬性就極爲恰當。 

android:clearTaskOnLaunch

這個屬性用於設定在從主屏中重啓任務時,處理根節點的Activity之外,任務中的其餘全部的Activity是否要被刪除。若是設置爲true,那麼任務根節點的Activity之上的全部Activity都要被清除,若是設置了false,就不會被清除。默認設置時false。這個屬性只對啓動新任務(或根Activity)的那些Activity有意義,任務中其餘全部的Activity都會被忽略。

當這個屬性值被設置爲true,用戶再次啓動任務時,任務根節點的Activity就會被顯示,而無論在任務的最後作了什麼,也無論任務使用Back按鈕,仍是使用Home離開的。當這個屬性被設置爲false時,在某些狀況中這個任務的Activity能夠被清除,但不老是這樣的。

例如,假設某人從主屏中啓動了Activity P,而且又從P中啓動了Activity Q。接下來用戶按下了Home按鈕,而後由返回到Activity P。一般用戶會看到Activity Q,由於這是在P的任務中所作的最後的事情。可是,若是P把這個屬性設置爲true,那麼在用戶按下Home按鈕,任務被掛起時,Activity P之上的全部Activity(本例中是Activity Q)都會被刪除。所以當用戶再次返回到本任務時,用戶只能看到Activity P

若是這個屬性和allowTaskReparenting屬性都被設置爲true,那些被設置了親緣關係的Activity會被轉移到它們共享的親緣任務中,而後把剩下的Activity都給刪除。


經典理解:

 這個屬性用來標記是否從task清除除根Activity以外的全部的Activity,「true」表示清除,「false」表示不清除,默認爲「false」。一樣,這個屬性也只對根Activity起做用,其餘的Activity都會被忽略。 若是設置了這個屬性爲「true」,每次用戶從新啓動這個應用時,都只會看到根Activity,task中的其餘Activity都會被清除出棧。若是咱們的應用中引用到了其餘應用的Activity,這些Activity設置了allowTaskReparenting屬性爲「true」,則它們會被從新宿主到有共同affinity的task中。


android:finishOnTaskLaunch

這個屬性和android:allowReparenting屬性類似,不一樣之處在於allowReparenting屬性是從新宿主到有共同affinity的task中,而finishOnTaskLaunch屬性是銷燬實例。若是這個屬性和android:allowReparenting都設定爲「true」,則這個屬性好些。


android:configChanges

在Activity中添加了 android:configChanges屬性,目的是當所指定屬性(Configuration Changes)發生改變時,通知程序調用 onConfigurationChanged()函數。

相關文章
相關標籤/搜索