gpt4 book ai didi

android - 即使在堆栈顶部,有时也会创建 singleTop Activity

转载 作者:太空狗 更新时间:2023-10-29 14:11:31 27 4
gpt4 key购买 nike

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

此 Activity 运行一个显示持续通知的前台服务。选择后,此通知只是将用户带回位于堆栈顶部的 Activity (没有从此 singleTop Activity 启动的 Activity )。我的问题是,当通知被选中时,有时会创建一个新的 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() 会在没有创建新实例的情况下被调用,并且一切都按预期进行。

我不知道为什么会这样。任务根部的状态 Activity 是否会对我的 singleTop Activity 的行为方式产生任何影响? FWIW,创建 MyProblematicActivity 的 Activity 是一个单任务 Activity 。

最佳答案

您遇到此问题是因为您正在使用 TaskStackBuilder。 TaskStackBuilder的行为是它总是重置任务,这意味着Activity将被再次创建。不要为此使用TaskStackBuilder,只需调用PendingIntent.getActivity()获取PendingIntent添加到您的Notification` .

关于android - 即使在堆栈顶部,有时也会创建 singleTop Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27613123/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com