我最近开始使用 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
这似乎发生在每次重组时,但我不知道我改变了什么导致它。
这段代码相关吗?
使用模拟器时似乎不是问题,目前是 Resizable API 33.
但是在 Pixel 7 Pro 物理设备上使用时确实会出现
现在,在物理设备上,自从我上次开发我的应用程序以来,我确实使用 12 月更新(内部版本号:TQ1A.221205.011)对其进行了更新。更新是否会导致这些 Logcat 条目发生变化?
以下是我得到的与此问题相关的一些发现。
我相信这一定会发生在 Android S 及更高版本中,并且在 2022 年 12 月更新之后也会发生。
BlastBufferQueue
是一种消息队列,其中应用程序布局窗口的几何形状发生变化,它将提交给 Android 平台的表面渲染器。多个应用程序发送的缓冲区将被同步。
在 Android S 之前,更改将通过
Transaction
发布。这里的缓冲区在从多个应用程序进程发送时不同步。
这个 BlastBufferQueue 有助于打开从多个应用进程发送的缓冲区之间的连接。
了解更多烧烤的链接:
https://www.jianshu.com/p/50a30fa6952e
https://www.jianshu.com/p/cdc60627df90
这是下面的代码,blastbuffer 从
ViewRootImpl
获得更新。
修复了在视图事务更新但缓冲区回调从未释放(在某些情况下)时发生 ANR 的问题。因此,此提交是在
TransactionCompleteCallback
完成时假释放缓冲区回调的解决方法。
在此提交中,已经提到这是一个安全的解决方法。提交中链接的根本问题是私有的。 这是 android 团队添加假释放缓冲区回调的提交更改。这就是您可能会收到此日志的原因。
最后总结一下这个日志可以放心无视
编辑: 我看到有些人因为一些溢出而导致致命的崩溃。我们必须等待 Greg 提出的 issue 的修复。 暂时,日志可以在 Logcat 窗口中静音。请参考问题下的评论。