4

我知道我要问的内容有一些帖子,但我找不到任何正确答案。

据我了解,如果您的主要活动(我们称其为 A)launchMode 设置为 singleTask,并且 A 已启动活动 B,则单击主页按钮将破坏历史堆栈并重新启动应用程序将带您回到 A而不是 B。

我已将 launchMode 设置为 singleTask,因为我有一个持久通知,并且我不希望在用户单击通知时出现多个主要活动实例。

有什么我想念的东西可以让我同时满足两者吗?

所以我问是否有一种方法可以确保无论何时用户希望启动应用程序,无论是否通过通知,都可以将他带回上一个(当前)活动。

如果我将 launchMode 更改为 singleTop 它可以工作,但是每当我启动它时我都会获得主要活动的多个实例。

谢谢

安德烈亚斯

4

4 回答 4

3

我使用以下代码来避免活动的多个实例

Intent intent=new Intent(this,RICO.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0);

更改清单看起来不适合我

于 2012-03-09T12:22:36.717 回答
2

您是否尝试将launchMode 设置为singleTop 到您的应用程序中的所有活动?因为我从您的查询中得到的是主要活动不是 singleTop,所以一旦主要活动从通知活动启动的活动启动,这可能会导致主要活动的另一个实例被调用。

或者,您可以将 launchMode 指定为清单中应用程序标记本身的属性。

于 2011-03-23T05:56:56.527 回答
0

我对这两种方法都有问题。通知仅在以下情况下才能正常工作: - 使用主活动中的后退按钮(历史仅包含该活动) - 不使用主页按钮 - 如果您正在调用的活动位于顶部且处于活动状态,则不使用通知

在任何其他情况下,通知不能再通过使用“new Intent(...)”在前台调用活动

于 2012-07-20T10:08:16.583 回答
0

我找到了清单选项和意图标志的炼金术组合来获得我需要的东西:

Intent intent= new Intent(this, YaampActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

使用这些选项

android:launchMode="singleTask"
android:taskAffinity=""
android:excludeFromRecents="true"

元素内部。

现在我有一个通知,它会产生主要活动(如果该活动尚未在前台),并且即使通过按下主页按钮和/或后退按钮“关闭”活动,它的行为也是正确的。

于 2012-07-23T09:54:12.657 回答