亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用不同的Intent啟動Activity時,如何阻止它的多個實例

如何使用不同的Intent啟動Activity時,如何阻止它的多個實例

墨色風雨 2019-08-30 10:25:24
如何使用不同的Intent啟動Activity時,如何阻止它的多個實例當我使用Google Play商店應用程序(以前稱為Android Market)上的“打開”按鈕啟動時,我在應用程序中遇到了一個錯誤。似乎從Play商店啟動它與使用Intent圖標的手機應用程序菜單啟動它不同。這導致啟動相同活動的多個副本,這些副本彼此沖突。例如,如果我的應用程序由活動ABC組成,那么此問題可能會導致一堆ABCA。我嘗試使用android:launchMode="singleTask"所有活動來解決這個問題,但每當我點擊HOME按鈕時,它都會產生不必要的副作用,即將活動堆棧清除為root。預期的行為是: ABC - > HOME - >當應用程序恢復時,我需要:ABC - > HOME - > ABC是否有一種很好的方法可以防止啟動相同類型的多個活動,而無需在使用HOME按鈕時重置為根活動?
查看完整描述

3 回答

?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

將此添加到onCreate,你應該很高興:


// Possible work around for market launches. See https://issuetracker.google.com/issues/36907463

// for more details. Essentially, the market launches the main activity on top of other activities.

// we never want this to happen. Instead, we check if we are the root and if not, we finish.

if (!isTaskRoot()) {

    final Intent intent = getIntent();

    if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && Intent.ACTION_MAIN.equals(intent.getAction())) {

        Log.w(LOG_TAG, "Main Activity is not the root.  Finishing Main Activity instead of launching.");

        finish();

        return;       

    }

}


查看完整回答
反對 回復 2019-08-30
?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

我只想解釋它失敗的原因,以及如何以編程方式重現此錯誤,以便將其合并到測試套件中:


當您通過Eclipse或Market App啟動應用程序時,它會使用意圖標志啟動:FLAG_ACTIVITY_NEW_TASK。


通過啟動器(home)啟動時,它使用標志:FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_BROUGHT_TO_FRONT | FLAG_ACTIVITY_RESET_TASK_IF_NEEDED,并使用操作“ MAIN ”和類別“ LAUNCHER ”。


如果您想在測試用例中重現這一點,請使用以下步驟:


adb shell am start -f 0x10000000 -n com.testfairy.tests.regression.taskroot/.MainActivity 

然后做任何事情來進行其他活動。為了我的目的,我只是放了一個按鈕來啟動另一個活動。然后,回到啟動器(主頁):


adb shell am start -W -c android.intent.category.HOME -a android.intent.action.MAIN

并模擬通過啟動器啟動它:


adb shell am start -a "android.intent.action.MAIN" -c "android.intent.category.LAUNCHER" -f 0x10600000 -n com.testfairy.tests.regression.taskroot/.MainActivity

如果您尚未合并isTaskRoot()解決方法,則會重現該問題。我們在自動測試中使用它來確保此錯誤不再發生。


希望這可以幫助!


查看完整回答
反對 回復 2019-08-30
  • 3 回答
  • 0 關注
  • 846 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號