iOS后台执行和防止应用程序被暂停/终止
Posted
技术标签:
【中文标题】iOS后台执行和防止应用程序被暂停/终止【英文标题】:iOS Background Execution and Preventing an App from being suspended/terminate 【发布时间】:2014-07-25 04:16:33 【问题描述】:我正在开发一个内部分发的 ios 应用(即没有应用商店),我希望能够每隔 10 分钟报告一次设备的位置。
无论如何,我已将location
作为字段UIBackgroundModes
的键包含在我的plist 中,希望这足以让我的应用程序在后台运行,而我每10 分钟运行一次计时器。但是,我发现在某些情况下,应用程序会停止报告这些事件。我怀疑该应用程序正在进入暂停状态,甚至可能由于内存限制而终止。我使用工具分析了我的内存占用,并排除了内存分配失控是终止的原因。
如何防止系统将我的应用程序置于暂停状态?文档对位置背景模式这么说:
启用此模式不会阻止系统暂停 应用程序,但它确实告诉系统它应该唤醒应用程序 每当有新的位置数据要交付时
太好了。所以它可能会被暂停,但新的位置数据会重新唤醒它。但是如果没有新的位置数据呢?我可以防止应用程序被暂停吗?也许使用不同的背景模式?
非常感谢任何帮助!
【问题讨论】:
我想您可以使用音频播放背景模式,并在您的应用程序进入后台后开始播放无声媒体文件。根据docs,这将防止应用程序被暂停。不太适合 App Store 提交,但由于您的应用是在内部部署的,它可能适合您 即使使用很少的内存也可以终止。随着用户启动的应用程序越来越多,一旦应用程序数量超过内存,就会终止一些应用程序。有一些方法可以将自己标识为“好公民”,比如当你被要求释放记忆时,这意味着你会比“坏公民”活得更长,但最终你会被终止。 【参考方案1】:你需要做两件事来防止位置管理器暂停,有:
self.locationManager.allowsBackgroundLocationsUpdates=true self.locationManager.pausesLocationUpdatesAutomatically = false
您可能还需要添加以下内容: self.locationManager.requestAlwaysAuthorization()
希望这会有所帮助,
【讨论】:
【参考方案2】:你可以试试:
[[UIApplication sharedApplication] setIdleTimerDisabled: YES];
但这会很快耗尽你的电池!
【讨论】:
以上是关于iOS后台执行和防止应用程序被暂停/终止的主要内容,如果未能解决你的问题,请参考以下文章
即使应用程序处于终止状态或被杀死,如何在 iOS 中获取位置更新? [复制]