iPhone在后台运行期刊流程 - 电池优化方式

时间:2011-09-08 14:11:46

标签: iphone background gps location battery

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

据我所知,除非我永远运行位置服务,否则我无法在后台启动某些内容。当这个服务运行时,它会不时给我一个事件,我可以在这些调用期间运行我的代码。我试过了,即使精度极低,我的电池也很快就会下降。

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

请帮忙吗? 谢谢,

2 个答案:

答案 0 :(得分:3)

你每小时真正想知道什么?您是要准确确定位置,还是仅确定手机是否移动得很明显?当电话“显着”移动时,startMonitoringSignificantLocationChanges会通知您(这通常意味着更换手机信号塔)。在城市,这种情况经常发生。 startMonitoringForRegion:desiredAccuracy:仅在您移出给定半径时才会通知您。

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

如果您是VoIP应用程序,那么您可以在运行代码时注册定期“签入”间隔。但是你不能为位置应用做这件事。

您是否使用Energy Diagnostics仪器分析了代码?实际上是在节省时间和力量?你在咀嚼收音机,CPU,磁盘吗?

修改

  

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

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

同样,只要有细胞覆盖,重要的位置变化在电池寿命方面应该是非常便宜的。他们不应该强迫GPS继续使用。

答案 1 :(得分:1)