activity 的属性android:taskAffinity和android:allowTaskReparenting
1.清單文件中,activity 的屬性
android:allowTaskReparenting
這個屬性用于設定Activity能夠從啟動它的任務中轉移到另一個與啟動它的任務有親緣關系的任務中,轉移時機是在這個有親緣關系的任務被帶到前臺的時候。如果設置了true,則能夠轉移,如果設置了false,則這個Activity必須要保留在啟動它的那個任務中。
如果這個屬性沒有設置,那么其對應的<application>元素的allowTaskReparenting屬性值就會應用到這個Activity上。它的默認值是false。
通常,當Activity被啟動時,它會跟啟動它的任務關聯,并它的整個生命周期都會保持在那個任務中。但是當Activity的當前任務不在顯示時,可以使用這個屬性來強制Activity轉移到與當前任務有親緣關系的任務中。這種情況的典型應用是把應用程序的Activity轉移到與這個應用程序相關聯的主任務中。
例如,如果一個電子郵件消息中包含了一個網頁的鏈接,點擊這個鏈接會啟動一個顯示這個網頁的Activity。但是,由e-mail任務部分啟動的這個Activity是由瀏覽器應用程序定義的。如果把它放到瀏覽器的任務中,那么在瀏覽器下次啟動到前臺時,這個網頁會被顯示,并且在e-mail任務再次顯示時,這個Activity有會消失。
Activity的親緣關系是由taskAffinity屬性定義的。通過讀取任務的根Activity的親緣關系來判斷任務的親緣關系。因此,通過定義,任務中的根Activity與任務有著相同的親緣關系。因此帶有singleTask或singleInstance啟動模式的Activity只能是任務的根節點,Activity的任務歸屬受限于standard和singleTop模式。
經典理解:
就是說,一個activity1原來屬于task1,但是如果task2啟動起來的話,activity1可能不再屬于task1了,轉而投奔task2去了。 當然前提條件是allowTaskReparenting,還有affinity設置 有點像,你撿到一條狗,在家里喂養幾天覺得不錯,當自己家的了;但是突然有一天他的主人找上門來了,小狗還是乖乖和主人走了。。。
或者:
????用法
是否允許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()函數。
轉自:http://blog.csdn.net/ym19860303/article/details/7611120
轉載于:https://www.cnblogs.com/androidxiaoyang/archive/2013/05/13/3075676.html
總結
以上是生活随笔為你收集整理的activity 的属性android:taskAffinity和android:allowTaskReparenting的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 黄山风景区清明节门票免费吗
- 下一篇: 年收入,20w多少钱?