activity 的属性android:taskAffinity和android:allowTaskReparenting
1.清單文件中,activity 的屬性
android:allowTaskReparenting
這個屬性用于設(shè)定Activity能夠從啟動它的任務(wù)中轉(zhuǎn)移到另一個與啟動它的任務(wù)有親緣關(guān)系的任務(wù)中,轉(zhuǎn)移時機是在這個有親緣關(guān)系的任務(wù)被帶到前臺的時候。如果設(shè)置了true,則能夠轉(zhuǎn)移,如果設(shè)置了false,則這個Activity必須要保留在啟動它的那個任務(wù)中。
如果這個屬性沒有設(shè)置,那么其對應(yīng)的<application>元素的allowTaskReparenting屬性值就會應(yīng)用到這個Activity上。它的默認值是false。
通常,當(dāng)Activity被啟動時,它會跟啟動它的任務(wù)關(guān)聯(lián),并它的整個生命周期都會保持在那個任務(wù)中。但是當(dāng)Activity的當(dāng)前任務(wù)不在顯示時,可以使用這個屬性來強制Activity轉(zhuǎn)移到與當(dāng)前任務(wù)有親緣關(guān)系的任務(wù)中。這種情況的典型應(yīng)用是把應(yīng)用程序的Activity轉(zhuǎn)移到與這個應(yīng)用程序相關(guān)聯(lián)的主任務(wù)中。
例如,如果一個電子郵件消息中包含了一個網(wǎng)頁的鏈接,點擊這個鏈接會啟動一個顯示這個網(wǎng)頁的Activity。但是,由e-mail任務(wù)部分啟動的這個Activity是由瀏覽器應(yīng)用程序定義的。如果把它放到瀏覽器的任務(wù)中,那么在瀏覽器下次啟動到前臺時,這個網(wǎng)頁會被顯示,并且在e-mail任務(wù)再次顯示時,這個Activity有會消失。
Activity的親緣關(guān)系是由taskAffinity屬性定義的。通過讀取任務(wù)的根Activity的親緣關(guān)系來判斷任務(wù)的親緣關(guān)系。因此,通過定義,任務(wù)中的根Activity與任務(wù)有著相同的親緣關(guān)系。因此帶有singleTask或singleInstance啟動模式的Activity只能是任務(wù)的根節(jié)點,Activity的任務(wù)歸屬受限于standard和singleTop模式。
經(jīng)典理解:
就是說,一個activity1原來屬于task1,但是如果task2啟動起來的話,activity1可能不再屬于task1了,轉(zhuǎn)而投奔task2去了。 當(dāng)然前提條件是allowTaskReparenting,還有affinity設(shè)置 有點像,你撿到一條狗,在家里喂養(yǎng)幾天覺得不錯,當(dāng)自己家的了;但是突然有一天他的主人找上門來了,小狗還是乖乖和主人走了。。。
或者:
????用法
是否允許activity更換從屬的任務(wù),比如從短信息任務(wù) 切換到瀏覽器任務(wù)。
用來標(biāo)記Activity能否從啟動的Task移動到有著affinity的Task(當(dāng)這個Task進入到前臺時)——“true”,表示能移動,“false”,表示它必須呆在啟動時呆在的那個Task里。
如果這個特性沒有被設(shè)定,設(shè)定到元素上的allowTaskReparenting特性的值會應(yīng)用到Activity上。默認值為“false”。
一般來說,當(dāng)Activity啟動后,它就與啟動它的Task關(guān)聯(lián),并且在那里耗盡它的整個生命周期。當(dāng)當(dāng)前的Task不再顯示時,你可以使用這個特性來強制Activity移動到有著affinity的Task中。典型用法是:把一個應(yīng)用程序的Activity移到另一個應(yīng)用程序的主Task中。 例如,如果e-mail中包含一個web頁的鏈接,點擊它就會啟動一個Activity來顯示這個頁面。這個Activity是由Browser應(yīng)用程序定義的,但是,現(xiàn)在它作為e-mail Task的一部分。如果它重新宿主到Browser Task里,當(dāng)Browser下一次進入到前臺時,它就能被看見,并且,當(dāng)e-mail Task再次進入前臺時,就看不到它了。 Actvity的affinity是由taskAffinity特性定義的。Task的affinity是通過讀取根Activity的affinity 決定。因此,根據(jù)定義,根Activity總是位于相同affinity的Task里。由于啟動模式為“singleTask”和 “singleInstance”的Activity只能位于Task的底部,因此,重新宿主只能限于“standard”和“singleTop”模式。
?
android:alwaysRetainTaskState
這個屬性用于設(shè)置Activity所屬的任務(wù)狀態(tài)是否始終由系統(tǒng)來維護。如果設(shè)置為true,則由系統(tǒng)來維護狀態(tài),設(shè)置為false,那么在某些情況下,系統(tǒng)會允許重設(shè)任務(wù)的初始狀態(tài)。默認值是false。這個屬性只對任務(wù)根節(jié)點的Activity有意義,其他所有的Activity都會被忽略。
通常,在某些情況中,當(dāng)用戶從主屏中重新啟動一個任務(wù)時,系統(tǒng)會先清除任務(wù)(從堆棧中刪除根節(jié)點Activity之上的所有Activity)。
但是,當(dāng)這個屬性被設(shè)置為true時,用戶會始終返回到這個任務(wù)的最后狀態(tài),而不管中間經(jīng)歷了哪些操作。這樣做是有好處的,例如,Web瀏覽器的應(yīng)用就會保留很多用戶不想丟失的狀態(tài),如多個被打開的標(biāo)簽頁。
經(jīng)典理解:
這個屬性用來標(biāo)記應(yīng)用的task是否保持原來的狀態(tài),“true”表示總是保持,“false”表示不能夠保證,默認為“false”。此屬性只對task的根Activity起作用,其他的Activity都會被忽略。 默認情況下,如果一個應(yīng)用在后臺呆的太久例如30分鐘,用戶從主選單再次選擇該應(yīng)用時,系統(tǒng)就會對該應(yīng)用的task進行清理,除了根Activity,其他Activity都會被清除出棧,但是如果在根Activity中設(shè)置了此屬性之后,用戶再次啟動應(yīng)用時,仍然可以看到上一次操作的界面。 這個屬性對于一些應(yīng)用非常有用,例如Browser應(yīng)用程序,有很多狀態(tài),比如打開很多的tab,用戶不想丟失這些狀態(tài),使用這個屬性就極為恰當(dāng)。?
android:clearTaskOnLaunch
這個屬性用于設(shè)定在從主屏中重啟任務(wù)時,處理根節(jié)點的Activity以外,任務(wù)中的其他所有的Activity是否要被刪除。如果設(shè)置為true,那么任務(wù)根節(jié)點的Activity之上的所有Activity都要被清除,如果設(shè)置了false,就不會被清除。默認設(shè)置時false。這個屬性只對啟動新任務(wù)(或根Activity)的那些Activity有意義,任務(wù)中其他所有的Activity都會被忽略。
當(dāng)這個屬性值被設(shè)置為true,用戶再次啟動任務(wù)時,任務(wù)根節(jié)點的Activity就會被顯示,而不管在任務(wù)的最后做了什么,也不管任務(wù)使用Back按鈕,還是使用Home離開的。當(dāng)這個屬性被設(shè)置為false時,在某些情況中這個任務(wù)的Activity可以被清除,但不總是這樣的。
例如,假設(shè)某人從主屏中啟動了Activity P,并且又從P中啟動了Activity Q。接下來用戶按下了Home按鈕,然后由返回到Activity P。通常用戶會看到Activity Q,因為這是在P的任務(wù)中所做的最后的事情。但是,如果P把這個屬性設(shè)置為true,那么在用戶按下Home按鈕,任務(wù)被掛起時,Activity P之上的所有Activity(本例中是Activity Q)都會被刪除。因此當(dāng)用戶再次返回到本任務(wù)時,用戶只能看到Activity P。
如果這個屬性和allowTaskReparenting屬性都被設(shè)置為true,那些被設(shè)置了親緣關(guān)系的Activity會被轉(zhuǎn)移到它們共享的親緣任務(wù)中,然后把剩下的Activity都給刪除。
?
經(jīng)典理解:
?這個屬性用來標(biāo)記是否從task清除除根Activity之外的所有的Activity,“true”表示清除,“false”表示不清除,默認為“false”。同樣,這個屬性也只對根Activity起作用,其他的Activity都會被忽略。 如果設(shè)置了這個屬性為“true”,每次用戶重新啟動這個應(yīng)用時,都只會看到根Activity,task中的其他Activity都會被清除出棧。如果我們的應(yīng)用中引用到了其他應(yīng)用的Activity,這些Activity設(shè)置了allowTaskReparenting屬性為“true”,則它們會被重新宿主到有共同affinity的task中。
?
android:finishOnTaskLaunch
這個屬性和android:allowReparenting屬性相似,不同之處在于allowReparenting屬性是重新宿主到有共同affinity的task中,而finishOnTaskLaunch屬性是銷毀實例。如果這個屬性和android:allowReparenting都設(shè)定為“true”,則這個屬性好些。
?
android:configChanges
在Activity中添加了 android:configChanges屬性,目的是當(dāng)所指定屬性(Configuration Changes)發(fā)生改變時,通知程序調(diào)用 onConfigurationChanged()函數(shù)。
轉(zhuǎn)自:http://blog.csdn.net/ym19860303/article/details/7611120
轉(zhuǎn)載于:https://www.cnblogs.com/androidxiaoyang/archive/2013/05/13/3075676.html
總結(jié)
以上是生活随笔為你收集整理的activity 的属性android:taskAffinity和android:allowTaskReparenting的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 黄山风景区清明节门票免费吗
- 下一篇: 年收入,20w多少钱?