同步發(fā)布到CSDN:https://blog.csdn.net/ling9400/article/details/80179198
轉(zhuǎn)載請(qǐng)注明出處
通過(guò)同一個(gè)app不同activity顯示多任務(wù)(仿微信小程序切換效果)這篇文章可以知道:
實(shí)現(xiàn)activity在recent task中,必須給需要打開的activity設(shè)置如下代碼
Intent intent = new Intent(myContext, ZDActivity.class);
intent.addFlag(Intent.FLAG_ACTIVITY_NEW_DOUCMENT);
...
startActivity(intent);
當(dāng)打開該activity之后,切換到recent task頁(yè)面,則會(huì)顯示兩個(gè)task.
然后這邊的需求是要在targetActivity中通過(guò)廣播來(lái)開啟另外一個(gè)activityB
此時(shí)啟動(dòng)的Activity必須添加intent.addFlag(Intent.FLAG_ACTIVITY_NEW_TASK)才能開啟,這是在廣播中開啟activity的必須條件,
這樣就會(huì)出現(xiàn)問(wèn)題:
假設(shè)啟動(dòng)ZDActivity的activity是ActivityA,廣播啟動(dòng)的activity是ActivityB,問(wèn)題就是通過(guò)廣播啟動(dòng)ActivityB時(shí),會(huì)跳轉(zhuǎn)到ActivityA,然后再啟動(dòng)ActivityB,同時(shí)切換到recent task頁(yè)面,會(huì)顯示三個(gè)task,這里不信的伙伴可以手動(dòng)試試就能看到效果。
要想解決這個(gè)問(wèn)題就必須要了解activity的taskAffinity屬性的使用
了解之后知道,只需要在manifest.xml中設(shè)置ActivityB的taskAffinity屬性即可,必須設(shè)置成跟包名不一樣,因?yàn)槟J(rèn)就是包名,這樣就已經(jīng)解決了通過(guò)廣播啟動(dòng)ActivityB時(shí),會(huì)跳轉(zhuǎn)到ActivityA,然后在啟動(dòng)ActivityB的問(wèn)題。
當(dāng)設(shè)置了taskAffinity屬性之后,不會(huì)跳轉(zhuǎn)到ActivityA了,但同樣還是會(huì)顯示三個(gè)task的問(wèn)題,這里暫時(shí)還沒有解決方案,請(qǐng)知道的小伙伴指點(diǎn)明路。
然后就回到上篇文章中說(shuō)的沒有使用finishAndRemoveTask()方法沒問(wèn)題的結(jié)論:錯(cuò)誤
很明顯,這里ActivityB的task需要關(guān)閉ActivityB的時(shí)候使用finishAndRemoveTask()方法才能關(guān)掉,但只能在5.0以上起作用,5.0以下添加intent.addFlag(Intent.FLAG_ACTIVITY_NEW_DOCUMENT)不起作用。
最后再說(shuō)下在這個(gè)場(chǎng)景下使用分享的問(wèn)題:
當(dāng)通過(guò)廣播啟動(dòng)ActivityB之后,ActivityB再啟動(dòng)分享到QQ,這里使用第三方SDK,如Mob等,你會(huì)發(fā)現(xiàn)分享到QQ之后,點(diǎn)擊“回到你的應(yīng)用”居然不會(huì)回到ActivityB,同樣的是回到了ActivityA,也有可能是先回到ActivityA,然后再回到ActivityB,也就是說(shuō)沒有正確的回調(diào)到正確的頁(yè)面,就這個(gè)問(wèn)題也問(wèn)過(guò)Mob的客服,那邊說(shuō)沒有辦法解決。
最后經(jīng)過(guò)不斷測(cè)試,需要在所有第三方配置的回調(diào)Activity中設(shè)置同樣的taskAffinity屬性即可。


以上內(nèi)容純粹個(gè)人測(cè)試總結(jié),如有問(wèn)題,請(qǐng)聯(lián)系改正,謝謝!