【问题标题】:Keep app in background for 10 mins while doing nothing in background将应用程序在后台保持 10 分钟,同时在后台不执行任何操作
【发布时间】:2013-03-28 16:41:23
【问题描述】:

我的应用中有这段代码 -

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • "未能明确结束任务将导致应用程序终止"。所以这就是日志显示崩溃的原因?我已经打开了一个异步 TCP 套接字来接收来自外部源的数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多