我目前正在使用的應用程序有一個非常奇怪的行爲。每當我通過XCode,iTunes或TestFlightApp安裝測試版本,應用程序就會正常啓動並運行得非常好。當我手動殺死應用程序並重新啓動時, 問題就出現了。然後顯示啓動圖像,這是最遠的應用程序 - 它只是凍結一段時間,然後操作系統擦除整個過程。崩潰日誌包含相當沒有用的信息,因爲它聲明 - 應用程序特定信息:未能及時啓動。 另外,在主辦方控制檯記錄以下:「應用程序」未能及時啓動
- 注意:位置圖標現在應該在狀態爲「無效」
- 警告:COM。 。未能及時發佈
- 警告:強制MyApp崩潰報告[7956] ...
- 警告:完成崩潰報告。
- 說明:退出的:(UIKitApplication COM [0x6a86]。):殺:9
- 說明:(UIKitApplication:。com [0x6a86])節流重生:請問 開始在2147483625秒
- 警告:應用程序'UIKitApplication:com。 。在研究的問題9
我已經花了一整天的時間: [0x6a86]」退出 與異常信號9:打死。只是澄清 - 任何UIApplication委託方法 (applicationDidBecomeActive,didFinishLaunchingWithOptions等)都不會執行任何同步工作或任何大量工作。 我注意到,如果在執行過程中沒有執行任何URL請求,則問題根本不會發生,即應用程序在被殺之前第二次正常運行。 只要提到問題出現在iOS 7下,但該應用程序也支持iOS 5和6。
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue currentQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){if (nil == error) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
(...)//creating ppError
if (nil == ppError) {
result = parsing(json, &ppError);
if (nil != ppError) {
result = nil;
}
}
dispatch_async(dispatch_get_current_queue(), ^{
if (PPServiceReturnedInvalidTokenErrorCode == ppError.code) {
(...)//do some parsing stuff
[[NSNotificationCenter defaultCenter] postNotificationName:PPRequestManagerUserAuthenticationTokenDidExprireNotification
object:self
userInfo:userInfo];
}
completion(result, ppError);
});
});
}
else {
completion(nil, ppError);
}
}];
這基本上是如何的所有請求都被製成,所以我認爲這一切都是正確的,但它是一個事實,如果我評論此代碼所描述的問題簡單地消失。
任何意見和建議將不勝感激。謝謝!
使用工具來查看應用程序的功能以及代碼中的哪些部分耗費了大量時間。通常情況下,如果主線程被阻止,並且應用程序在啓動時需要超過10秒才能獲得響應,就會發生這種情況。 – Kerni
在你的完成處理程序中,第二個dispatch_async(),你是否意味着分派到當前隊列?因爲這樣做什麼都不會做,所以你已經在當前隊列上定義了 –
@PatrickGoley在當前隊列上的dispatch_async將代碼至少洗到下一個runloop。所以它「確實」。這個洗牌的副作用之一是當前的runloop結束,並告訴SpringBoard該應用程序已經及時啓動。 –