我有在 Pixel 和 Pixel 2 XL 上都运行 8.1 的 beta 测试。从我回来的日志来看,对 AAssetManager_open 的调用似乎被阻止等待互斥锁解锁。
从日志中看不出线程冲突。在一个设备上,它发生在应用程序加载时读取的第三个资产上。所有这些都是分开的(并清理)但顺序的。死锁的另一个设备稍后。没有线程涉及相关代码。
我还没有在另一台设备上遇到这个问题,所以我什至无法在本地玩它以进一步了解(我没有任何设备)。从 Android 源代码中,我发现互斥锁的使用没有任何复杂性。
这些调用发生在主线程上(因此是 ANR),所以我可以通过将它们移到那里来解决问题。不过,理想情况下,我想首先解决(或至少了解其原因)为什么会在这些设备上发生死锁的根本问题。
那么,我想知道是否有任何已知的方法可以使用 AAssetManager_open 创建死锁?
在旁注中,我发现的壁橱是一篇文章,其中提到在奥利奥预发布版本中,人们在 AAssetManager_open 上获得 ANR,但我找不到其他任何内容。
编辑:我知道在不同的 8.1 设备(OnePlus5)上发生了崩溃,所以它似乎不是特定于 Pixel,而是一般来说是 8.1。
我还移动了 AssetManager 在主线程上读取的内容,以防万一,并且正如预期的那样,问题仍然存在(只是没有得到 ANR)。
编辑#2:它特定于带有 AdMob 中介的 8.1。