从通知恢复活动

我的应用的状态栏中有一条通知:

    Notification notification = new Notification(R.drawable.icon, null, System.currentTimeMillis());

    Intent notificationIntent = new Intent(this.parent, MainActivity.class);
    PendingIntent contentIntent = PendingIntent.getActivity(this.parent, 0, notificationIntent, 0);

    ...

    notification.flags = Notification.FLAG_ONGOING_EVENT;        
    mNotificationManager.notify(NOTIFICATION_ID, notification);

这样做的问题是,当您从应用程序中按主页按钮(将其推送到后台)然后按从状态栏访问的列表中的通知时,它会启动活动的全新副本。我想做的就是恢复应用程序(就像你长按主页按钮并按下应用程序的图标一样)。有没有办法创建一个意图来做到这一点?


答案 1

我已经通过将我的活动更改为androidManifest.xml文件中来解决此问题。launchModesingleTask

此属性的默认值为 ,它允许运行任意数量的实例。standard

“singleTask”和“singleInstance”活动只能开始一个任务。它们始终位于活动堆栈的根目录中。此外,设备一次只能保存一个活动实例 , 只能保存一个这样的任务。[...]

“singleTask”和“singleInstance”模式仅在一个方面彼此不同:“singleTask”活动允许其他活动成为其任务的一部分。它始终是其任务的根源,但其他活动(必须是“标准”和“单一顶部”活动)可以启动到该任务中。另一方面,“单实例”活动不允许其他活动成为其任务的一部分。这是任务中唯一的活动。如果它启动另一个活动,则该活动将分配给其他任务 , 就好像FLAG_ACTIVITY_NEW_TASK在意图中一样。

您可以在 Android 开发者指南中找到详细的说明

我希望这有帮助


答案 2

我遇到了类似的问题,处理这个问题的正确方法是使用标志:Intent.FLAG_ACTIVITY_CLEAR_TOP和Intent.FLAG_ACTIVITY_SINGLE_TOP像这样

notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

从文档中,这将:

FLAG_ACTIVITY_CLEAR_TOP

如果设置了,并且正在启动的活动已经在当前任务中运行,则将关闭该活动之上的所有其他活动,而不是启动该活动的新实例,并且此 Intent 将作为新 Intent 传递到(现在位于顶部)旧活动。

FLAG_ACTIVITY_SINGLE_TOP

如果设置了,则如果活动已在历史记录堆栈的顶部运行,则不会启动该活动。