如果将setKeepAliveTimeout方法设置为15分钟,则VOIP应用程序无法及时唤醒。

3
我开发了一个应用程序,需要每15分钟处理一次一些数据。所以我将VOIP标志添加到plist文件中,并使用setKeepAliveTimeout设置了900秒(15分钟)。还添加了后台任务功能来处理一些数据。数据处理需要最多10秒钟。
问题是应用程序没有准时唤醒。有时在12分钟后,有时在16分钟后等等。但我需要恰好在15分钟内唤醒。
如何解决这个问题?
iOS版本为5.0+。
如果这是iOS的特定问题,请提供官方参考链接到苹果的API文档中,其中提到了此问题。

“Wake up”是什么意思?你是在安排NSTimer吗?还是使用本地通知?或者其他什么方式? - Nicholas Hart
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的有限后台处理选项,所有这些选项都旨在为操作系统管理所有进程的总体优先级和资源需求提供很大的自由度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接