我有两个应用程序App-B推出App-A。如果用户从App A内部启动App B,我在App-A上调用完成,所以我没有问题。
如果用户从应用程序抽屉直接进入应用程序B或长按主页按钮,则执行下面的操作,在应用所有附加内容之前先清除App A中的任务。这具有所需的效果,但仅适用于API 11.在较低的API上,APP-A中的新任务不会更改,并且额外的putExtra将不起作用。 FLAG_ACTIVITY_CLEAR_TASK
的替代方案?对于API< = 10?
Intent i = new Intent("com.App-A");
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
谢谢
杰森
答案 0 :(得分:14)
新的IntentCompat应该对此有所帮助,但显然该API会在低于11的情况下被忽略。
要使用IntentCompat,请执行以下操作:
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
答案 1 :(得分:2)
这将正常工作
i.addFlag(Intent.FLAG_ACTIVITY_NO_HISTORY |
Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
答案 2 :(得分:1)
我发现这些Intent标志的最佳文档是:http://blog.akquinet.de/2010/04/15/android-activites-and-tasks-series-intent-flags/
我不明白你想做什么,但你试过FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET
吗?
答案 3 :(得分:1)
我理解你在问什么可能是错的,但是当你发布B时,你想要A被杀?
在A中,将其添加到清单中的活动标记:
android:noHistory=true
这将导致活动失去焦点后立即从内存中删除。
答案 4 :(得分:0)
我仍然在理解问题方面遇到很多麻烦,但我想帮助您解决问题。由于评论只允许600个字符并且格式不好,我将创建一个答案,因为我确信我们可以一起解决这个问题。
我希望能够重现您的问题。为此,我创建了2个应用程序: AppA 和 AppB 。 AppA有一个名为ActivityA
的活动,AppB有一个名为ActivityB
的活动。 ActivityA
和ActivityB
都使用android:launchMode="singleTask"
。
ActivityA
上面有一个按钮,可以启动AppB并完成,如下所示:
Intent intent = new Intent("de.sharpmind.example.AppB");
intent.putExtra("extra", "launched from AppA");
startActivity(intent);
finish();
ActivityB
上有一个按钮,可以启动AppA:
Intent intent = new Intent("de.sharpmind.example.AppA");
intent.putExtra("extra", "launched from AppB");
startActivity(intent);
这一切都按照我的预期进行。 AppA和AppB运行在不同的任务中。在每个应用程序的onCreate()
方法中都可以正确地看到“额外”。
那么,请你告诉我更多你的问题。我怎样才能准确再现您的问题?你写道:
在较低的API上,APP-A中的新任务不会改变,而额外的putExtra也不会有效。
你是什么意思?你在哪里放置额外的东西,你在哪里得到它们,你期望发生什么?
此外,launchMode
的{{1}}是什么?
此外,当您遇到此问题时,AppA的任务堆栈中是否还有其他活动?
请在原始问题或此处作为评论提供更多信息。
答案 5 :(得分:0)
使用FLAG_ACTIVITY_CLEAR_TASK
清除后台堆栈。
如果我理解正确,这就是你想要的行为。
在清单中使用singleInstance
代替singleTask
即可。
在评论中你说它必须是singleTask
。我假设这是因为在某些情况下你需要后筹码。
由于launchMode
无法在programaticaly中更改,FLAG_ACTIVITY_CLEAR_TASK
无法用于API< = 10,因此您可能需要创建两个相同的活动。
一个launchMode=singleTask
,一个launchMode=singleInstance
。
将此添加到使用singleInstance
的那个,以便在从应用抽屉启动时获得清晰的堆栈:
<category android:name="android.intent.category.LAUNCHER" />