当前位置: 首页 > 知识库问答 >
问题:

使用PendingEvent时不尊重singleTask和singleInstance?

咸利
2023-03-14

我有一个将launchMode设置为singleTask的活动:

<activity
    android:name="com.blah.blah.MyActivity"
    android:launchMode="singleTask">
</activity>

我有一个持续的通知,其中包含启动该活动的PendingIntent:

Intent activityIntent = new Intent( this,
                                    MyActivity.class );
TaskStackBuilder stackBuilder = TaskStackBuilder.create( this );
stackBuilder.addParentStack( MyActivity.class );
stackBuilder.addNextIntent( activityIntent );
PendingIntent resultingActivityPendingIntent = stackBuilder.getPendingIntent( REQUEST_CODE,
                                                                              PendingIntent.FLAG_UPDATE_CURRENT );
...
m_notificationBuilder.setContentIntent( resultingActivityPendingIntent );
startForeground( ONGOING_NOTIFICATION_ID,
                 m_notificationBuilder.build() );

当我与现有的MyActivity交互时,我点击Home并通过启动器重新启动MyActivity,MyActivity的onNewIntent()按预期调用。

问题是,当我与现有的MyActivity交互时,我点击正在进行的通知,通过onCreate()创建一个新的MyActivity,通过onDestroy()销毁现有的MyActivity。我希望MyActivity的onNewIntent()会被调用。为什么不发生这种事?

我尝试过这些答案都没有成功:

  • 意图-如果活动正在运行,请将其置于最前面,否则(从通知中)启动一个新活动。

共有1个答案

计光赫
2023-03-14

您的问题是由于使用了TaskStackBuilder。此代码导致了您的问题:

Intent activityIntent = new Intent( this,
                                MyActivity.class );
TaskStackBuilder stackBuilder = TaskStackBuilder.create( this );
stackBuilder.addParentStack( MyActivity.class );
stackBuilder.addNextIntent( activityIntent );
PendingIntent resultingActivityPendingIntent =
         stackBuilder.getPendingIntent(REQUEST_CODE,
         PendingIntent.FLAG_UPDATE_CURRENT );

当您以这种方式使用TaskStackBuilder时,它会在生成的Intent中设置额外的标志,这些标志会导致在您的活动启动之前重置任务(任务中的所有活动都被销毁)。

而是使用:

Intent activityIntent = new Intent( this,
                                MyActivity.class );
PendingIntent resultingActivityPendingIntent =
         PendingIntent.getActivity(this, REQUEST_CODE,
             activityIntent, PendingIntent.FLAG_UPDATE_CURRENT );
 类似资料:
  • 问题内容: 在纯Java SE 6环境中: Eclipse控制台中未显示任何内容。 l.info(“”) 及以上的作品就好了,但低于任何 罚款 只是似乎没有工作。有什么问题吗?TIA。 问题答案: 即使Logger级别设置为ALL,ConsoleHandler(记录器上的默认Handler)仍然具有INFO的默认级别。这来自 JAVA_HOME / jre / lib中 的默认logging.pr

  • 我试图创建一个,它会发出关于反压力的事件,以避免内存问题,同时并行运行转换的每个阶段以提高效率。我创建了一个简单的测试程序,来解释我的程序的不同步骤的行为,以及何时发出事件,何时等待不同的阶段。 我的程序如下: 当我运行这个程序时,我得到了与预期背压相关的输出,其中一批事件被发送到

  • 我对ChartJS还不熟悉,但这让我感觉好像遇到了一个bug。我在下面编写了JSFIDLE作为示例来演示这个问题。 https://jsfiddle.net/4mxvb3yg/ 超文本标记语言 Javascript 目前,小提琴的表现与我所希望的一样(没有图例的条形图,因为其显示属性设置为false)。但是,如果您取消注释HTML中的顶行以使用CDN链接作为源,它将不再尊重已禁用的图例。 我目前正

  • 我编写了一个组件,它使用BoxLayout对一些JLabels进行水平布局,然后使用glue(我希望JLabels的宽度保持不变)。例如: 我需要为每个JLabel添加两行文本,所以我使用了一点HTML。当我添加HTML时,BoxLayout就不再尊重胶水了。我得到的是: 我可以通过指定最大大小应该等于首选大小(指定首选大小没有影响)来绕过这个问题。这是正确的做法吗?当我的JLabels中有HTM

  • 环境: Eclipse Juno Junit 4.11 maven 3.0.4 问题: 我相信在Eclipse的junit运行器中运行单元测试时遇到了类加载问题。我的具体问题源于这段代码: 上面的代码最终将使用一个类的名称调用,该类位于maven依赖项中(依赖项只是一个java bean的集合)。当我运行mvn测试时,这段代码成功运行,但是,如果我使用eclipse运行junit测试,我会收到一个

  • 我不知道为什么背压在这个流动链中没有得到尊重。 我将其简化为以下三个阶段:,和。前两个阶段的速度比最后一个阶段快得多,因此它们的输出会让内存等待第3步,从而导致内存不足错误/内存使用量不断增加。 当我观看调试器时,我注意到步骤1比步骤3更频繁地发生,尽管我已经将缓冲区大小(observeOn的第三个参数)设置为一个较低的数字(例如1)。 我已经阅读了我正在使用的每个运算符的留档,看起来他们都有一些