应用程序在被用户终止(即强行杀死应用程序)后2~5秒呈现崩溃。这种情况只发生在多个unity版本的iOS构建上(详见下文).大部分的崩溃报告都没有到达Crashlytics上。控制台上的崩溃非常少,尽管我们每天都在持续重现这个错误.Android构建没有出现同样的错误。
以下是目前所有尝试过的解决方案,没有成功。
说明: 一般的问题是,在iOS上有任何一段代码,在应用最终完成时,会阻塞主线程(见 本文件 获取更多信息)。) 在我们的例子中,它的发生是因为当玩家杀死应用程序时有持续的请求。当应用程序终止时,我们将玩家的进度保存在服务器上(使用 Dispose()
方法),该请求阻塞了主线程,导致崩溃。解决方案是删除这个特定的保存。我们测试了一个包含这个修复的构建,到目前为止,我们在游戏场景加载后,在20次尝试杀死游戏的过程中没有出现崩溃。我们之前没有想到这一点,因为这段代码从2019年8月开始就有了,而且从那时起就没有再碰过。这个问题是在2020年2月才开始发生的。
更多信息: 由于这段有问题的代码自2019年8月起就在项目中,而问题在2020年2月才开始发生,所以它是 可能的 的iOS版本与之有关。我们还没有调查变更日志,但目前呈现崩溃的最老的iOS版本是2019年10月28日发布的iOS 13.2。
另一种可能是我们的后端代码发生了一些变化,导致请求挂起。由于我们使用的是BestHTTP,默认情况下,当应用程序终止时,所有请求都会被中止。我们还没有调查是否执行顺序的 Dispose
与。OnDisable/OnApplicationQuit
可能是这个问题。另外,默认情况下,在Application Quit期间被BestHTTP中止的请求仍然会调用回调。在我们的例子中,那个保存播放器的回调是 null
所以这可能不是问题所在。
相关崩溃: 我们仍然面临一些加载场景的崩溃。就我们看到的情况来看,它们发生在有请求的时候。这些问题的重现率远低于游戏场景上的问题。
提示: 我们在Crashlytics上检索日志时遇到了困难,因为大部分日志都没有被发送。以下是如何从iOS设备本身检索日志的步骤。