2017-10-09 67 views
3

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

我已经启用了后台位置和后台获取权限,并且我还启用了CLLocationManager上的后台位置更新。

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

+2

你消耗的网络服务?如果是这样,你需要做异步。它阻止了应用程序,它不能改变状态,从而导致崩溃。 –

+0

你试过重新启动它吗? – epokhe

+0

@RogersSampaio我使用AZSClient(Azure存储客户端)将一些信息传输到blob服务器。从我的角度来看,它以异步的方式处理工作;但我不知道它是内部的。我会检查它。 –

回答

1

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

0x8badf00d(“吃不好的食物”; lol)表明监视程序进程(监视死/阻塞进程)是否会导致您的应用程序死机,一般是因为您做了某些操作来阻止主线程。如果你避免阻塞主线程,这个错误应该消失。请参阅Technical Note 2151: Understanding and Analyzing Application Crash Reports并搜索0x8badf00d

,因为它说:

异常代码0x8badf00d指出一个应用程序已经被终止的iOS因为看门狗超时发生。应用程序花费太长时间才能启动,终止或响应系统事件。造成这种情况的一个常见原因是synchronous networking on the main thread。不管什么操作,线程0都需要移动到后台线程,或者进行不同的处理,以便它不会阻塞主线程。

他们专注于同步网络请求,但它可以是阻塞主线太久的任何事情,无论是缓慢的同步进程还是死锁等。你应该看看线程0的堆栈跟踪,看看你能否确定什么阻塞了主线程。尽管如此,我们还是不能诊断它。

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