iPhone在后台运行周期性进程-电池优化方式

iPhone在后台运行周期性进程-电池优化方式,iphone,background,gps,location,battery,Iphone,Background,Gps,Location,Battery,我想在后台运行一个特定的任务。此任务需要几秒钟才能完成(它会将一些GPS位置数据写入文件)。此任务应每1小时运行一次 从SDK中我了解到,除非我永远运行位置服务,否则我无法在后台启动某些东西。当这个服务运行时,它会不时地给我一个事件,我可以在这些调用期间运行我的代码。我试过了,即使精度尽可能低,我的电池也会很快耗尽 所以,我正在寻找一种每小时运行几秒钟定位服务的方法。其余时间我都不想运行定位服务,也不想使用电池 你能帮忙吗? 谢谢 Gena您最好的选择是使用显著的位置更改。。。以下是一些链接,您

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

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

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

你能帮忙吗? 谢谢


Gena

您最好的选择是使用显著的位置更改。。。以下是一些链接,您可以从中获得帮助-


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

startMonitoringSignificantLocationChanges
非常便宜。它主要依赖于蜂窝天线,而蜂窝天线通常是无线的。如果它每小时触发一次以上,您总是可以跳过处理并返回。但不能保证你每小时会接到一次电话,尤其是在农村地区

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

您是否使用能量诊断仪分析了代码?到底是什么在消耗时间和力量?你在嚼收音机、CPU、磁盘吗

编辑

当应用程序死机时,显著的变化仍会继续运行,并在iPhone顶部工具栏的百分比旁边留下一个小的方向箭头图标。我的用户抱怨说,关闭应用程序后图标仍然存在

在应用程序死机后,如果您注册了重大更改,您将期望重新启动以响应这些更改。如果要在终止的情况下注销,可以将
stopMonitoring…
添加到
应用程序willterminate:
方法中。这并不保证会被调用,但这是一件好事,我相信如果用户直接终止您,并且您没有被挂起(还没有测试),它会被调用


同样,只要有电池覆盖,重大的位置变化在电池寿命方面应该是非常便宜的。他们不应该强迫GPS保持打开状态。

谢谢您的回答。这正是我现在正在做的,也是我不想做的:)电池太多了。。如果您正在使用显著的位置更改,那么没有更好的方法来提高电池寿命…谢谢。我将对此进行研究。我试过了,得出了以下两个结论:1。与常规位置服务相反,重要位置更改服务不允许我在后台运行任务。2.无法关闭“重要位置更改”服务。即使应用程序被终止,它也始终保持打开状态。您在UIBackgroundModes中有
location
,但您不会被显著的位置更改唤醒吗?调用
stopmoningsignificantlocationchanges
不会注销您的注册?1。我有背景模式的位置。我确实被重大的位置变化吵醒了。但我无法在后台运行计时器,无法在计时器启动时执行操作。计时器不会在后台启动,与使用位置服务相反(计时器会在后台启动)。2.如果我能运行Stop,它会取消我的注册。但如果我的应用程序被杀了,我就无法运行它。当应用程序死机时,显著的变化仍会继续运行,并在iPhone顶部工具栏的百分比旁边留下一个小的方向箭头图标。我的用户抱怨说,关闭应用程序后图标仍然存在