4

我有一个将 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,MyActivityonNewIntent()会按预期调用。

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

我尝试了这些答案但没有成功:

4

1 回答 1

8

您的问题是由于使用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这种方式时,它会在您的 Activity 启动之前在生成的 s 中设置额外的标志,Intent从而导致任务被重置(任务中的所有活动都被销毁)。

而是使用:

Intent activityIntent = new Intent( this,
                                MyActivity.class );
PendingIntent resultingActivityPendingIntent =
         PendingIntent.getActivity(this, REQUEST_CODE,
             activityIntent, PendingIntent.FLAG_UPDATE_CURRENT );
于 2015-02-01T21:47:42.340 回答