【问题标题】:android - launchMode=singleTask and Notifications?android - launchMode=singleTask 和通知?
【发布时间】:2011-03-20 17:55:25
【问题描述】:

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

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

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

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

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

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

谢谢

安德烈亚斯

【问题讨论】:

    标签: android android-activity notifications launchmode


    【解决方案1】:

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

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

    【讨论】:

    • 为我工作。谢谢,阿南德!
    【解决方案2】:

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

    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);
    

    更改清单对我来说似乎不合适

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        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"
        

        在元素内部。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-02-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-04
          • 2015-12-25
          • 1970-01-01
          • 2020-03-26
          相关资源
          最近更新 更多