如何跟踪并解决Android应用程序的BLASTBufferQueue伪造releaseBufferCallback?

Dol*_*naj 45 android logcat kotlin android-jetpack-compose

我最近开始使用 Kotlin 和 Jetpack Compose 构建我的第一个应用程序。到目前为止,我还没有在 Logcat 中看到这个错误,由于我缺乏经验,我很困惑!我正在清理代码,将函数提取到其他类文件,清理我制作的可组合项之一的 UI,现在我得到了 BLASTBufferQueue 的常量 Logcat 条目,其中包含以下条目:

14:03:10.687  E  [VRI[MainActivity]#0](f:0,a:3) Faking releaseBufferCallback from transactionCompleteCallback
14:03:10.687  E  [VRI[MainActivity]#0](f:0,a:3) Faking releaseBufferCallback from transactionCompleteCallback
14:03:10.704  E  [VRI[MainActivity]#0](f:0,a:3) Faking releaseBufferCallback from transactionCompleteCallback
14:03:10.704  E  [VRI[MainActivity]#0](f:0,a:3) Faking releaseBufferCallback from transactionCompleteCallback
14:03:10.722  E  [VRI[MainActivity]#0](f:0,a:3) Faking releaseBufferCallback from transactionCompleteCallback
14:03:10.722  E  [VRI[MainActivity]#0](f:0,a:3) Faking releaseBufferCallback from transactionCompleteCallback
14:03:10.738  E  [VRI[MainActivity]#0](f:0,a:3) Faking releaseBufferCallback from transactionCompleteCallback
Run Code Online (Sandbox Code Playgroud)

似乎每次重组都会发生这种情况,但我不知道我改变了什么导致它。

这段代码有关系吗?

使用模拟器时这似乎不是问题,目前是可调整大小的 API 33。

但在物理设备(Pixel 7 Pro)上使用时确实会出现。

现在,在物理设备上,自从我上次开发应用程序以来,我确实使用 12 月更新(内部版本号:TQ1A.221205.011)对其进行了更新。更新后是否发生了某些变化导致出现这些 Logcat 条目?

Gow*_*K K 34

以下是我得到的与此问题相关的一些发现。

1)什么是BlastBufferQueue?

我相信这一定会发生在 Android S 及更高版本中,并且在 2022 年 12 月更新之后也会发生。这 BlastBufferQueue是一种消息队列,应用程序布局窗口的几何形状发生变化,它将被提交到 Android 平台的表面渲染器。多个应用程序发送的缓冲区将被同步。

在 Android S 之前,更改将通过Transaction. 这里,当从多个应用程序进程发送缓冲区时,缓冲区不同步。

此 BlastBufferQueue 有助于打开从多个应用程序进程发送的缓冲区之间的连接。

了解更多烧烤相关知识的链接:

https://www.jianshu.com/p/50a30fa6952e

https://www.jianshu.com/p/cdc60627df90

在此输入图像描述

这是下面的代码,其中blastbuffer正在从中获取更新ViewRootImpl

在此输入图像描述 来源链接

2)日志的根本原因。

我能够找到添加此特定日志的提交。

链接到提交

这是对视图事务更新但缓冲区回调从未释放(在某些情况下)时发生 ANR 的问题的修复。TransactionCompleteCallback因此,此提交是在完成时假装释放缓冲区回调的解决方法。

在此输入图像描述

在此提交中,有人提到这是一个安全的解决方法。提交中链接的根本问题是私有的。这是 Android 团队添加了假释放缓冲区回调的提交更改。这就是您可能会收到此日志的原因。

最后总结一下,这个日志可以安全地忽略。

编辑: 我看到有些人由于某些溢出而发生致命崩溃。我们必须等待Greg 提出的问题得到解决。暂时,可以在 Logcat 窗口中使日志保持静默。请参阅问题下的评论。

  • 关于这个主题,这是值得了解的有趣信息!@ahandyapp 的上述评论之一提到他发生了崩溃,并且 BlastBufferQueue 日志条目是他得到的唯一信息,“但是,一个在视频流上执行艺术风格传输并在侦听器之间进行多次转换的应用程序会崩溃,并且没有其他错误消息,除了BLASTBufferQueue 消息 - 所以它并不完全是良性的。” 不过,根据您的回答,他遇到的崩溃似乎与 BlastBufferQueue 无关。此外,BBQ 条目在 2022 年 12 月更新后在 Android 13 上启动,但在 12 月之前它没有启动。 (2认同)
  • 感谢您的调查!我已经针对此日志垃圾邮件提交了 Android 问题,因为似乎还没有:https://issuetracker.google.com/issues/271675642 (2认同)
  • “可以安全地忽略”除非它被记录在错误级别。并且记录了大量的副本。哇!这不是工作软件应该有的行为。 (2认同)