4

我想在后台运行特定任务。此任务需要几秒钟才能完成(它将一些 GPS 位置数据写入文件)。此任务应每 1 小时运行一次。

正如我从 SDK 中了解到的那样,除非我永远运行位置服务,否则我无法在后台启动某些东西。当此服务运行时,它会不时给我一个事件,并且我可以在这些调用期间运行我的代码。我试过了,即使精度尽可能低,我的电池电量也会很快下降。

所以,我正在寻找一种每小时运行几秒钟的定位服务的方法。其余时间我不想运行定位服务,也不想使用电池。

你能帮忙吗?谢谢,

热那

4

2 回答 2

3

每小时你真正想知道什么?您是在尝试准确地确定位置,还是只是确定手机是否发生了明显移动?startMonitoringSignificantLocationChanges当手机“显着”移动(这通常意味着更换手机信号塔)时会通知您。在城市中,这种情况经常发生。startMonitoringForRegion:desiredAccuracy:只会在您移动到给定半径之外时通知您。

startMonitoringSignificantLocationChanges很便宜。它主要依赖于蜂窝天线,无论如何它通常都是打开的。如果它每小时触发一次以上,您总是可以跳过处理并返回。但是不能保证你会被叫一个小时一次,特别是在农村地区。

如果您是一个 VoIP 应用程序,那么您可以在运行代码时注册一个定期的“签入”间隔。但是您不能对位置应用程序执行此操作。

您是否使用 Energy Diagnostics 仪器分析过您的代码?什么是真正的吃时间和力量?你在咀嚼收音机、CPU、磁盘吗?

编辑

当应用程序终止时,重大更改仍会继续运行,并在 iPhone 顶部工具栏上的百分比旁边留下一个小的方向箭头图标。我的用户抱怨杀死应用程序后图标仍然存在

应用程序死后,如果您注册了重大更改,您会期望重新启动以响应它们。如果您想在被终止的情况下取消注册,您可以添加stopMonitoring...到您的applicationWillTerminate:方法中。这不能保证被调用,但这是一件好事,我相信如果用户直接终止您并且您没有被暂停(尚未测试),它将被调用。

同样,只要有小区覆盖,就电池寿命而言,重大的位置变化应该非常便宜。他们不应强迫 GPS 保持开启状态。

于 2011-09-08T14:39:02.330 回答