我遇到了一個非常具體的情況下「無法及時恢復」崩潰(我認爲它是看門狗相關的):只有在從後臺恢復時,並且只有在非常短的時間內去背景之後的時間量(最多幾秒鐘)。應用程序未能及時恢復
這似乎是相關的崩潰日誌:
Incident Identifier: E30F2238-5B15-49A1-BCBC-386791AC93FA
CrashReporter Key: 84f4fb61c9e5c597750146695fffdc55f7273fb7
Hardware Model: iPod4,1
Process: XXXXXXX
Path: /var/mobile/Applications/DE774CCE-D452-418D-A862-4562A0E5F1D0/XXXXXXX.app/XXXXXXX
Identifier: XXXXXXX
Version: ??? (???)
Code Type: ARM (Native)
Parent Process: launchd [1]
Date/Time: 2013-01-14 13:15:41.955 +0200
OS Version: iOS 6.0 (10A403)
Report Version: 104
Exception Type: 00000020
Exception Codes: 0x000000008badf00d
Highlighted Thread: 0
Application Specific Information:
XXXXXXX failed to resume in time
Elapsed total CPU time (seconds): 9.140 (user 9.140, system 0.000), 91% CPU
Elapsed application CPU time (seconds): 7.806, 78% CPU
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0:
0 libsystem_kernel.dylib 0x336fa7cc fsync + 8
1 Foundation 0x3a444974 _NSWriteBytesToFileWithExtendedAttributes + 668
2 Foundation 0x3a4446ce _NSWriteBytesToFile + 22
3 Foundation 0x3a4446ac -[NSData(NSData) writeToFile:atomically:] + 80
4 XXXXXX 0x001777ee 0xe3000 + 608238
5 CoreFoundation 0x38361034 _CFXNotificationPost + 1424
6 Foundation 0x3a437d8c -[NSNotificationCenter postNotificationName:object:userInfo:] + 68
7 Foundation 0x3a43b84e -[NSNotificationCenter postNotificationName:object:] + 26
8 XXXXXX 0x000e6616 0xe3000 + 13846
9 UIKit 0x37e050e4 -[UIApplication _handleApplicationSuspend:eventInfo:] + 780
10 UIKit 0x37d7b1ea -[UIApplication handleEvent:withNewEvent:] + 2454
11 UIKit 0x37d7a6d0 -[UIApplication sendEvent:] + 68
12 UIKit 0x37d7a11e _UIApplicationHandleEvent + 6150
13 GraphicsServices 0x3600d5a0 _PurpleEventCallback + 588
14 GraphicsServices 0x3600d1ce PurpleEventCallback + 30
15 CoreFoundation 0x383e5170 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 32
16 CoreFoundation 0x383e5112 __CFRunLoopDoSource1 + 134
17 CoreFoundation 0x383e3f94 __CFRunLoopRun + 1380
18 CoreFoundation 0x38356eb8 CFRunLoopRunSpecific + 352
19 CoreFoundation 0x38356d44 CFRunLoopRunInMode + 100
20 GraphicsServices 0x3600c2e6 GSEventRunModal + 70
21 UIKit 0x37dce2fc UIApplicationMain + 1116
22 XXXXXXX 0x000e5cd0 0xe3000 + 11472
23 XXXXXXX 0x000e5c6c 0xe3000 + 11372
我試圖調試這一點,但它似乎並沒有當連接到一個調試器(以及所有相關信息,我發現上發生該問題表明wacthdog在連接到調試器時被禁用),所以我嘗試記錄該進程以嘗試並遵循所發生的事情。
我添加記錄到所有AppDelegate
相關方法(applicationWillResignActive
,applicationDidEnterBackground
,applicationWillEnterForeground
,applicationDidBecomeActive
甚至applicationWillTerminate
),但是從後臺返回時,將背景只有當沒有得到日誌。我知道某些進程可以以一種方式進行調度,即使應用程序在後臺運行指定的時間也可以恢復,但我不會自行執行任何此類進程。也許Facebook的SDK做這樣的事情,但我也找不到任何的參考,而崩潰日誌沒有提供任何跡象。
我在這裏有點不知所措,並希望任何推動,甚至在正確的方向推動。
你可能阻塞主線程過長,iOS的終止應用程序。你必須將長程序推到任何後臺線程,這可能會有所幫助。 – holex