我们最近在Crashlytics本机崩溃处理程序中遇到了死锁 . 发生崩溃时(SIGILL,SIGSEGV或SIGTRAP),我们的应用程序将无限期地冻结 . 我们尝试将crashlytics升级到最新版本(从2.6.8 / 1.1.6升级到2.8.0 / 2.0.1),但没有任何区别 .

这种僵局似乎只发生在Android 8上 . 在Android 7下,该应用程序不会冻结,但它似乎也不会生成崩溃报告 . 它似乎也与一些第三库(Tapjoy&Supersonic)有关 . 当我们禁用这两个问题时,问题就消失了 . 我的猜测是,这些库会产生额外的踏板,可能会干扰碰撞处理器 .

我设法在调试器中获取了用于死锁的callstack . 似乎崩溃解决方案处理程序正在访问AssetManager和pthread,这些已知在崩溃处理期间是不安全的 .

这是一个已知的问题? Crashlytic本机处理程序是否需要调用不安全的函数(假设我得到的callstack没有被搞砸)?而且,最重要的是,我们至少有一个快速的解决方法吗? :)

The screenshot for the Callstack

https://i.stack.imgur.com/BxH1w.png