在我的ios应用程序中,当我接收到后台获取执行时,我开始在后台监听用户的位置更新(最多15分钟)。但是,在我停止更新之后,应用程序会出现0x8badf00d错误。
我已经启用了后台位置和后台获取权限,我还在CLLocationManager上启用了后台位置更新。
知道为什么会发生这个错误吗?
发布于 2017-10-09 22:25:34
问题不在于它没有在后台运行,而是它正在运行的东西阻塞了主线程。
0x8badf00d (“吃坏的食物”;lol)表示监视进程(监视死进程/被阻塞的进程)杀死了应用程序,通常是因为您做了一些事情来阻塞主线程。如果您避免阻塞主线程,则此错误将消失。请参阅技术注释2151:理解和分析应用程序崩溃报告和搜索0x8badf00d。
如其所述:
异常代码
0x8badf00d表示由于发生了看门狗超时,应用程序已被iOS终止。应用程序需要很长时间才能启动、终止或响应系统事件。造成这种情况的一个常见原因是做主线程上的同步网络。线程0上的任何操作都需要移动到后台线程,或者以不同的方式处理,这样它就不会阻塞主线程。
他们专注于同步网络请求,但是它可以是任何阻塞主线程太长时间的东西,无论是缓慢的同步进程还是死锁或其他什么。您应该查看线程0的堆栈跟踪,看看是否能够识别什么阻塞了主线程。不过,这里还不足以诊断它。
常见的原因包括同步网络调用、同步GCD调用、不适当地使用信号量、锁或调度组“等待”调用、死锁等。
https://stackoverflow.com/questions/46655106
复制相似问题