我目前正在使用的应用程序有一个非常奇怪的行为。每当我通过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该应用程序已经及时启动。 –