将应用程序保留在后台10分钟,而在后台无所事事

时间:2013-03-28 16:41:23

标签: iphone ios objective-c xcode app-store

我在我的应用中有这个代码 -

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    ...
    bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
            if (bgTask != UIBackgroundTaskInvalid)
            {
                [application endBackgroundTask:bgTask];
                bgTask = UIBackgroundTaskInvalid;
            }
    }];
    //NO MORE CODE AFTER THAT
}

我只想延长我的应用在后台运行的持续时间,以处理来自外部源的一些事件。 通过使用此代码,应用程序有时应用程序正在崩溃日志 -

  

[app-name] 拥有超出允许时间的有效断言

任何人都可以帮我这个吗?

即使崩溃,它也不会影响用户。由于应用程序处于后台,用户无法了解崩溃。我只是担心应用商店评论的拒绝。急需帮助! :(

编辑: 我的应用程序是通过异步TCP套接字与外部设备通信。使用上面的代码,当我将我的应用程序发送到后台时,它会再收集数据10分钟。 10分钟后,当我将应用程序带到前台时,应用程序尚未关闭,但它显示套接字连接已断开连接。因此,只要应用程序在10分钟后到达前景,它就会开始重新建立连接。

大约80%的测试用例都会发生这种情况。剩下的20%导致上述崩溃。

1 个答案:

答案 0 :(得分:1)

你在后台主线程上做了什么工作?如果您阻止了它,则不会调用到期处理程序块viz

  

在应用程序剩余之前不久调用的处理程序   后台时间达到0.您应该使用此处理程序来清理和   标记后台任务的结束。未能结束任务   明确地将导致应用程序的终止。该   在主线程上同步调用handler,从而阻塞了   应用程序暂时暂停应用程序   通知。

这将导致看门狗将您作为未能及时终止后台任务的原因。