2011-09-08 75 views
4

我想在后台运行一个特定的任务。该任务需要几秒钟才能完成(它将一些GPS位置数据写入文件)。此任务应每1小时运行一次。iPhone在后台运行定期进程 - 电池优化方式

正如我从SDK了解的,我没有办法在后台启动某些东西,除非我永远运行位置服务。当这个服务运行时,它会不时地给我一个事件,并且我可以在这些调用期间运行我的代码。我试过了,即使是尽可能小的精度,我的电池速度也很快下降。

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

你能帮忙吗? 谢谢,

吉纳

回答

1
+0

谢谢你的回答。这正是我现在正在做的以及我不想做的事情:)电池太多。 – Gena

+0

那么..如果你正在使用显着的位置变化,那么没有更好的方法来提高电池寿命... – Saurabh

3

你真的想知道每个h我们的?你是否试图准确地确定位置,或者只是确定手机是否显着移动? startMonitoringSignificantLocationChanges会在手机“显着”移动(通常意味着更换手机信号塔)时通知您。在城市中,这可能会经常发生。 startMonitoringForRegion:desiredAccuracy:只会在您移出给定半径范围时才会通知您。

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

如果你是一个VoIP应用程序,那么当你运行代码时,你可能会注册一个周期性的“签入”间隔。但是你不能为位置应用程序执行此操作。

您是否使用能量诊断仪器分析了您的代码?实际上吃什么是时间和力量?你在咀嚼收音机,CPU,磁盘吗?

编辑

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

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

此外,只要存在小区覆盖范围,重要的位置变化在电池寿命方面应该非常便宜。他们不应该强制GPS继续。

+0

谢谢。我会看看这个。 – Gena

+0

我试过了,得出以下2个结论:1.显着位置更改服务不允许我在后台运行任务,因为它与常规位置服务相反。 2.无法关闭重要位置更改服务。即使应用程序被终止,它也会一直保持打开状态。 – Gena

+0

你有UIBackgroundModes中的'location',但是你不会被重大的位置改变唤醒?调用'stopMonitoringSignificantLocationChanges'不会取消注册吗? –