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是將參數添加上去。
