【问题标题】:iOS : Application Crashes with error "Application failed to launch in time"iOS:应用程序崩溃并出现错误“应用程序未能及时启动”
【发布时间】:2011-10-19 18:13:40
【问题描述】:

我的 iOS 应用没有在后台运行。当点击主页按钮时,应用程序将终止。

下面是我的代码

- (void)applicationDidEnterBackground:(UIApplication *)application 
{
  double sleepTime = [[UIApplication sharedApplication] backgroundTimeRemaining] - 1;

  [self performTaskforTime:sleepTime];
}

如果应用程序立即重新启动,应用程序的新实例将因错误而终止:

异常类型:00000020 异常代码:0x8badf00d 突出显示 线程:0

应用程序特定信息:My_App 未能及时启动

我无法减少睡眠时间。有什么解决办法吗?

【问题讨论】:

    标签: ios


    【解决方案1】:

    你需要从- (void)applicationDidEnterBackground:(UIApplication *)application返回,做这样的事情:

    - (void)applicationDidEnterBackground:(UIApplication *)application 
    {
      UIBackgroundTaskIdentifier btid = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL];
    
      double sleepTime = [[UIApplication sharedApplication] backgroundTimeRemaining] - 1;
    
      dispatch_async(/* background queue */, ^{
        [self performTaskforTime:sleepTime];
        [[UIApplication sharedApplication] endBackgroundTask:btid];
      }
    }
    

    您不希望长时间运行的任务阻塞主队列,否则您将无法为 UI 提供服务。您的应用程序正忙于-performTaskforTime:,因此无法及时启动。

    【讨论】:

    • 我试过了,因为我的应用不在后台运行会退出,任务永远不会执行。
    • 更新了我的答案。您需要调用 -beginBackgroundTaskWithExpirationHandler: 在后台运行。
    【解决方案2】:

    您不能阻塞主应用程序线程超过几秒钟。请参阅此 SO 帖子。

    Link

    【讨论】:

    • 我看到应用程序作为一个新实例启动,并且在新实例中线程没有被阻塞。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多