1

我试图在我的应用程序中显示来自 BroadcastReceiver 的通知,但是创建父堆栈给我带来了问题。当我调用以下代码时,应用程序只是冻结(没有例外,只是冻结)

Intent notifIntent = new Intent(context, NotificacionesActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addNextIntentWithParentStack(notifIntent); // <- code execution freezes here
PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

这基本上是这里的android文档的复制粘贴:https ://developer.android.com/training/notify-user/navigation#build_a_pendingintent_with_a_back_stack

几秒钟后,输出显示这个

Thread[3,tid=5321,WaitingInMainSignalCatcherLoop,Thread*=0xf005cc00,peer=0x16940088,"Signal Catcher"]: reacting to signal 3
Wrote stack traces to '[tombstoned]'

然后开始发送垃圾邮件

Background concurrent copying GC freed 87185(5MB) AllocSpace objects, 0(0B) LOS objects, 16% free, 30MB/36MB, paused 223us total 101.944ms

我查了一下,似乎应该在 /data 的某个地方保存一个 tomstone 跟踪,但我在那里找不到任何东西,我认为日志永远不会被保存。该活动在清单中声明了 parentActivityName。

<activity
   android:name=".activity.NotificacionesActivity"
   android:parentActivityName=".activity.MainActivity"
   android:theme="@style/AppTheme.NoActionBar"
   android:screenOrientation="portrait"
   />

如果我不创建待处理的意图,则会显示通知,因此我很确定上面的代码是造成问题的代码。我在 Api 28 和 29 (android 9 & 10) 上尝试过,卸载应用程序,甚至创建一个新的虚拟设备,结果是一样的,有趣的是这段代码曾经可以工作,现在它就不行了。

4

1 回答 1

0

已解决 似乎我的 mainActivity 将自己作为 parentActivityName,因此创建堆栈会导致递归循环大声笑。

于 2021-07-19T14:32:41.990 回答