iPhone在后台运行周期性进程 - 电池优化方式
Posted
技术标签:
【中文标题】iPhone在后台运行周期性进程 - 电池优化方式【英文标题】:iPhone running periodical process in the background - battery optimized way 【发布时间】:2011-11-13 01:07:15 【问题描述】:我想在后台运行特定任务。此任务需要几秒钟才能完成(它将一些 GPS 位置数据写入文件)。此任务应每 1 小时运行一次。
据我从 SDK 了解到,除非我永远运行定位服务,否则我无法在后台启动某些东西。当这个服务运行时,它会不时地给我一个事件,我可以在这些调用期间运行我的代码。我试过了,即使精度尽可能低,我的电池也很快没电了。
所以,我正在寻找一种每小时运行几秒钟定位服务的方法。其余时间我不想运行定位服务,也不想使用电池。
你能帮忙吗? 谢谢,
格纳
【问题讨论】:
【参考方案1】:您实际上每小时都想知道什么?您是在尝试准确地确定位置,还是只是确定手机是否发生了明显移动? startMonitoringSignificantLocationChanges
会在手机“明显”移动时通知您(这通常意味着更换手机信号塔)。在城市中,这种情况经常发生。 startMonitoringForRegion:desiredAccuracy:
只会在您移出给定半径时通知您。
startMonitoringSignificantLocationChanges
相当便宜。它主要依赖于蜂窝天线,无论如何它通常都是打开的。如果它每小时触发一次以上,您总是可以跳过处理并返回。但不能保证您每小时会接到一次电话,尤其是在农村地区。
如果您是 VoIP 应用程序,那么您可以在运行代码时注册一个定期的“签入”间隔。但您不能对定位应用执行此操作。
您是否使用 Energy Diagnostics 工具分析了您的代码?什么是真正的吃时间和力量?你在咀嚼收音机、CPU、磁盘吗?
编辑
当应用终止时,重大更改仍会继续运行,并在 iPhone 顶部工具栏上的百分比旁边留下一个小的方向箭头图标。我的用户抱怨杀死应用程序后图标仍然存在
应用终止后,如果您注册了重大更改,您可能会重新启动以响应这些更改。如果您想在被终止的情况下取消注册,您可以将 stopMonitoring...
添加到您的 applicationWillTerminate:
方法中。这不保证会被调用,但这是一件好事,我相信如果用户直接终止您并且您没有被暂停(尚未测试),它将被调用。
同样,只要有小区覆盖,就电池寿命而言,重大的位置变化应该非常便宜。他们不应强制 GPS 保持开启状态。
【讨论】:
谢谢。我会看看这个。 我已经尝试过了,得出以下两个结论: 1. 与常规位置服务相反,重要位置更改服务不允许我在后台运行任务。 2. 没有办法关闭重要位置更改服务。即使应用程序被终止,它也始终保持开启状态。 您在 UIBackgroundModes 中有location
,但您不会因为位置发生重大变化而被唤醒?拨打stopMonitoringSignificantLocationChanges
不会取消您的注册?
1.我在后台模式中有位置。我确实会因为重大的位置变化而被吵醒。但是我无法在后台运行计时器并在此计时器触发时执行操作。与使用定位服务相反,计时器不会在后台触发(计时器会在后台触发)。 2. 如果我可以运行它,Stop 会注销我。但是如果我的应用程序被杀死,我将无法运行它。当应用程序终止时,重大更改仍会继续运行,并在 iPhone 顶部工具栏上的百分比旁边留下一个小的方向箭头图标。我的用户抱怨杀死应用程序后图标仍然存在【参考方案2】:
您最好的选择是使用重大的位置更改...这里有一些链接可以帮助您 -
http://developer.apple.com/library/ios/#documentation/CoreLocation/Reference/CLLocationManager_Class/CLLocationManager/CLLocationManager.html
http://www.switchonthecode.com/tutorials/getting-your-location-in-an-iphone-application
http://longweekendmobile.com/2010/07/22/iphone-background-gps-accurate-to-500-meters-not-enough-for-foot-traffic/#more-480
【讨论】:
感谢您的回答。这正是我现在正在做的,也是我不想做的 :) 电池太多了。 好吧..如果您使用显着的位置变化,那么没有更好的方法来延长电池寿命...以上是关于iPhone在后台运行周期性进程 - 电池优化方式的主要内容,如果未能解决你的问题,请参考以下文章
iphone - 使用 startMonitoringSignificantLocationChanges 和 desiredAccuracy 的电池