为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用不同的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 关注
  • 814 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信