我的应用程序里有这个代码-
- (void)applicationDidEnterBackground:(UIApplication *)application
{
...
bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
if (bgTask != UIBackgroundTaskInvalid)
{
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}
}];
//NO MORE CODE AFTER THAT
}我只想延长我的应用程序在后台运行的时间,以处理来自外部源的一些事件。通过使用这个应用程序的代码,有时应用程序会与日志崩溃-
应用程序名的主动断言超过了允许的时间。
有人能帮我吗?
即使它崩溃了,也不会影响用户。由于应用程序处于后台,用户不会了解该应用程序的崩溃情况。我只是担心应用商店的评论会拒绝我。需要紧急帮助!
编辑:我的应用程序是通过异步TCP与外部设备进行通信。使用上面的代码,当我将我的应用程序发送到后台时,它会接收额外10分钟的数据。在 10分钟后,当我将应用程序带到前台时,应用程序还没有关闭,但它显示套接字连接已经断开。因此,当应用程序在10分钟后到达前台,它就开始重新建立连接。
这种情况发生在大约80%的测试用例中。剩下的20%导致了上述事故。
发布于 2013-03-28 16:46:10
在后台,你在主线上做什么工作?如果您正在阻止它,则不会调用过期处理程序块,维兹
在应用程序的剩余后台时间达到0之前不久将调用的处理程序。您应该使用这个处理程序来清理和标记后台任务的结束。如果不显式地结束任务,将导致应用程序的终止。在主线程上同步调用处理程序,从而在通知应用程序时暂时阻止应用程序的暂停。
这将导致看门狗在你没有及时结束你的背景任务的情况下对你进行批评。
https://stackoverflow.com/questions/15687459
复制相似问题