2017-10-09 94 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,不恰當地使用信號量,鎖,或調度組的「等待」的呼叫,死鎖等