即使位于堆栈顶部,有时也会创建 singleTop Activity

2024-01-02

我有一个 Activity,其 launchMode 为 singleTop (在清单中)。我的理解是,如果一个 Activity 是 singleTop 并且它位于 Activity 堆栈的顶部,那么使用新 Intent 启动 Activity 实际上将导致在 Activity 上调用 onNewIntent() ,而不会创建该 Activity 的新实例(因此,不会调用 onCreate())。

此活动运行一个前台服务,显示正在进行的通知。选择后,此通知只会将用户带回到堆栈顶部的 Activity(没有从该 singleTop 活动启动的活动)。我的问题是,当选择通知时,有时创建 Activity 的新实例 - 即使它明显已位于堆栈顶部。这对我的 Activity 来说是有问题的,因为它的行为对于在后台被杀死并重新启动的情况是不同的(与仅通过 onNewIntent() 带到前台)。我的服务用于呈现通知的代码如下:

TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(MainActivity.class);

Intent notificationIntent = new Intent(this, MyProblematicActivity.class);
notificationIntent.putExtra(EXTRA_MY_DATA, "MyData");
stackBuilder.addNextIntent(notificationIntent);

PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

Notification.Builder notificationBuilder = new Notification.Builder(getApplicationContext()).
        setSmallIcon(smallIconResourceId).
        setContentTitle(contentTitle).
        setContentText(contentText).
        setAutoCancel(false).
        setOngoing(true).
        setContentIntent(pendingIntent);

startForeground(MY_NOTIF_ID, notificationBuilder.build());

我说这种行为有时会发生,而且一旦发生就会反复发生。例如:

  1. MyProblematicActivity 首次启动
  2. 服务启动并显示通知
  3. 已选择通知。
  4. 再次创建 MyProblematicActivity(服务已启动,通知已显示)。
  5. 前重复 2-4 次。

有时,在 #3 之后,MyProblematicActivity 的 onNewIntent() 会被调用而不创建新实例,并且事情会按预期进行。

我不知道为什么会发生这种情况。任务根部的状态活动会对我的 singleTop 活动的行为产生影响吗? FWIW,创建 MyProblematicActivity 的活动是一个 singleTask 活动。


你遇到这个问题是因为你正在使用TaskStackBuilder. The behaviour of任务栈生成器is that it always resets the task, which means that theActivitywill be created again. Don't use任务栈生成器for this, just callPendingIntent.getActivity()to get a待定意向to add to your通知`。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

即使位于堆栈顶部,有时也会创建 singleTop Activity 的相关文章

随机推荐