3

我开发的应用程序应该每 15 分钟处理一次数据。所以我在 plist 文件中添加了 voip 标志。并使用 900 秒(15 分钟)的 setKeepAliveTimeout。还添加了处理一些数据的后台任务功能。处理数据最多需要 10 秒。

问题是应用程序没有及时唤醒。有时在 12 分钟后,有时在 16 分钟后等等。但我需要正好在 15 分钟内。

如何解决以下问题?

iOS版本为5.0+

如果是 iOS 特定的,请向我提供有关此处提到的苹果 api 文档的官方参考。

4

1 回答 1

2

setKeepAliveTimeout:handler:不是通用的间隔调度程序。它允许您设置提供的处理程序的调用之间的最大间隔。该功能的目的是帮助您防止连接超时或落后于您的 VOIP 应用程序标准(例如在线/离开状态)。

所以第一个参数 ( timeout) 告诉 iOS 在不超过15 分钟内调用你的处理程序。如果操作系统决定在 12 分钟内有一些空闲周期,它可能会调用您的处理程序。或在 7 分钟内,或 15 分钟内。

如果您需要对间隔进行更细粒度的控制,您应该设置一个较小的超时窗口并忽略对您不重要的调用。但是调用仍然会相当不规则。

http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIApplication_Class/Reference/Reference.html#//apple_ref/occ/instm/UIApplication/setKeepAliveTimeout:handler

一般来说,目前没有办法让它按精确的时间表唤醒你的应用程序。您必须遵守 iOS 有限的后台处理选项,所有这些选项都旨在为操作系统提供很大的余地来管理所有进程的总体优先级和资源需求。

于 2013-07-29T22:08:41.003 回答