Taskaffinity屬性使用小結


TaskAffinity屬性小結

最近在項目中用到了TaskAffinity屬性,發現這個還是挺有意思,可以用來控制activity所屬的任務棧。但同時只設置這一個屬性又是不能完成功能的,需要與其它屬性相配合。

一.通過配置方式來實現TaskAffinity來實現

上邊說到要想使TaskAffinity屬性生效,要與其它屬性相配合。在配置文件中,需要設置activity的啟動模式為singleTask或singleInstance才能生效(其實singleInstance本來就會在新Task中)

<activity android:name=".bActivity" android:launchMode="singleTask" android:taskAffinity="taskName"/> 

 

二.通過動態的方式實現TaskAffinity屬性

通過上述的配置,可以實現TaskAffinity屬性。但是這樣每次啟動該Activity都會在TaskAffinity指定的棧中啟動。有時候可能會希望該activity在特殊情況下才在TaskAffinity指定的棧中啟動,大部分時候還是在原有的任務棧中啟動,這個時候就需要動態方式來實現TaskAffinity屬性。
在配置文件中,只制定TaskAffinity屬性,而不制定launchMode的屬性為singleTask。

<activity android:name=".bActivity" android:taskAffinity="taskName"/> 

 

這樣通過正常方式啟動該Activity時,該Activity就會在原有任務棧中啟動(啟動該Activity的任務棧中)。若想在taskAffinity屬性生效,需要在啟動該Activity時設置Flag為FLAG_ACTIVITY_NEW_TASK。

Intent intent = new Intent(aAvtivity.this, bActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);

 

當TaskAffinity生效時,如已經存在相應名稱的任務棧,則不會新建棧,而是在該棧的棧頂建立相應activity;如果沒有相應名稱的任務棧,就會建立對應名稱的新的任務棧。

另外說明一點,setFlags和addFlags的區別是:setFlags會直接將原來的Flag直接替換掉;而addFlags是將參數添加上去。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM