1

我的应用程序中有此代码-

- (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% 会导致上述崩溃。

4

1 回答 1

1

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

在应用程序的剩余后台时间达到 0 之前不久将调用的处理程序。您应该使用此处理程序来清理并标记后台任务的结束。未能明确结束任务将导致应用程序终止。处理程序在主线程上同步调用,因此在通知应用程序时会暂时阻止应用程序的挂起。

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

于 2013-03-28T16:46:10.060 回答