我试图在我的应用程序中显示来自 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) 上尝试过,卸载应用程序,甚至创建一个新的虚拟设备,结果是一样的,有趣的是这段代码曾经可以工作,现在它就不行了。