singleInstance和TaskStackBuilder的问题

时间:2014-03-28 16:33:01

标签: android android-notifications android-pendingintent android-notification-bar

我有一个标记为singleInstance的主要活动。然后,我有一个通知,打开一个不同的活动,下面是两个声明:

<activity android:name="MainActivity" android:launchMode="singleInstance".....

<activity android:name="some.long.package.from.a.library.NotificationActivity" android:noHistory="true" android:launchMode="singleInstance" android:parentActivityName=".MainActivity">
  <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity"/>
</activity>

当我创建通知时,我修改了任务堆栈,以便插入父活动:

 Intent intent = new Intent(context, NotificationActivity.class);
 PendingIntent pendingIntent = TaskStackBuilder.create(context)
                .addNextIntentWithParentStack(intent)
                .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

这一切都很有效,除了一个小问题,当我触摸通知并转到NotificationActivity然后使用后退按钮或操作栏上的后面时,它会转到一个全新的{ {1}}。

我知道MainActivity不是大多数情况下使用的理想启动模式,但我有一个类似于网络浏览器的应用程序,理想情况下用户应该准确回到他们是浏览器。我可以保存页面地址并重新加载它(我将在最坏的情况下使用),但想象一下,如果你正在填写一个长形式,而你的浏览器只是因为你确认了通知而这样做了。

所有人都可以告诉我为什么在我对待处理的意图修改任务堆栈时忽略了singleInstance

感谢。

1 个答案:

答案 0 :(得分:1)

您正在尝试构建逻辑上不一致的任务堆栈。

您已声明MainActitylaunchMode="singleInstance"。这意味着MainActivity必须是其任务中的根活动,并且没有其他活动将启动到此任务(即:包含MainActivity的任务将只有一个1活动)。

然后,您尝试构建一个包含MainActivity的任务堆栈作为NotificationActivity的父活动。这是不一致的,所以Android不会这样做。