1. 程式人生 > >同一個App不同Activity顯示多工引發的問題

同一個App不同Activity顯示多工引發的問題

實現activity在recent task中,必須給需要開啟的activity設定如下程式碼

Intent intent = new Intent(myContext, ZDActivity.class);
intent.addFlag(Intent.FLAG_ACTIVITY_NEW_DOUCMENT);
...
startActivity(intent);

當開啟該activity之後,切換到recent task頁面,則會顯示兩個task.

然後這邊的需求是要在targetActivity中通過廣播來開啟另外一個activityB

此時啟動的Activity必須新增intent.addFlag(Intent.FLAG_ACTIVITY_NEW_TASK)

才能開啟,這是在廣播中開啟activity的必須條件,
這樣就會出現問題:

假設啟動ZDActivity的activity是ActivityA,廣播啟動的activity是ActivityB,問題就是通過廣播啟動ActivityB時,會跳轉到ActivityA,然後再啟動ActivityB,同時切換到recent task頁面,會顯示三個task,這裡不信的夥伴可以手動試試就能看到效果。

要想解決這個問題就必須要了解activity的taskAffinity屬性的使用

瞭解之後知道,只需要在manifest.xml中設定ActivityB的taskAffinity屬性即可,必須設定成跟包名不一樣,因為預設就是包名,這樣就已經解決了通過廣播啟動ActivityB時,會跳轉到ActivityA,然後在啟動ActivityB的問題。

當設定了taskAffinity屬性之後,不會跳轉到ActivityA了,但同樣還是會顯示三個task的問題,這裡暫時還沒有解決方案,請知道的小夥伴指點明路。

然後就回到上篇文章中說的沒有使用finishAndRemoveTask()方法沒問題的結論:錯誤

很明顯,這裡ActivityB的task需要關閉ActivityB的時候使用finishAndRemoveTask()方法才能關掉,但只能在5.0以上起作用,5.0以下新增intent.addFlag(Intent.FLAG_ACTIVITY_NEW_DOCUMENT)不起作用。

最後再說下在這個場景下使用分享的問題:

當通過廣播啟動ActivityB之後,ActivityB再啟動分享到QQ,這裡使用第三方SDK,如Mob等,你會發現分享到QQ之後,點選“回到你的應用”居然不會回到ActivityB,同樣的是回到了ActivityA,也有可能是先回到ActivityA,然後再回到ActivityB,也就是說沒有正確的回撥到正確的頁面,就這個問題也問過Mob的客服,那邊說沒有辦法解決。

最後經過不斷測試,需要在所有第三方配置的回撥Activity中設定同樣的taskAffinity屬性即可。
QQ回撥

主配置activity,微博回撥

以上內容純粹個人測試總結,如有問題,請聯絡改正,謝謝!