我在我的应用中有这个代码 -
- (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%导致上述崩溃。
答案 0 :(得分:1)
你在后台主线程上做了什么工作?如果您阻止了它,则不会调用到期处理程序块viz:
在应用程序剩余之前不久调用的处理程序 后台时间达到0.您应该使用此处理程序来清理和 标记后台任务的结束。未能结束任务 明确地将导致应用程序的终止。该 在主线程上同步调用handler,从而阻塞了 应用程序暂时暂停应用程序 通知。
这将导致看门狗将您作为未能及时终止后台任务的原因。