0x8badf00d在后台获取时收听位置后崩溃

时间:2017-10-09 21:15:02

标签: ios crash core-location background-fetch

在我的ios应用程序中,当我收到后台获取执行时,我开始在后台监听用户的位置更新一段时间(最多15分钟)。但是,在我停止更新后,应用程序崩溃并出现0x8badf00d错误。

我启用了后台位置和后台获取权限,我还在CLLocationManager上启用了后台位置更新。

有关此错误发生原因的任何想法?

1 个答案:

答案 0 :(得分:1)

问题不在于它不是在后台运行,而是正在运行的是阻塞主线程。

0x8badf00d(“吃不好的食物”; lol)表示监视程序进程(监视死/被阻止的进程)杀死了你的应用程序,通常是因为你做了一些事情来阻止主线程。如果您避免阻止主线程,此错误应该消失。请参阅Technical Note 2151: Understanding and Analyzing Application Crash Reports并搜索0x8badf00d

正如它所说:

  

异常代码0x8badf00d表示iOS已终止应用程序,因为发生了监视程序超时。应用程序花费太长时间来启动,终止或响应系统事件。造成这种情况的一个常见原因是synchronous networking on the main thread。无论线程0上的操作是什么,都需要移动到后台线程,或者以不同方式处理,以便它不会阻塞主线程。

他们专注于同步网络请求,但它可能是阻塞主线程太长时间的任何事情,无论是慢速同步进程还是死锁等等。您应该查看线程0的堆栈跟踪,看看是否可以识别阻塞主线程的内容。但是,我们这里的诊断还不够。

常见的罪魁祸首包括同步网络呼叫,同步GCD呼叫,不恰当使用信号量,锁定或调度组“等待”呼叫,死锁等。