【问题标题】:iPhone GPS - Battery Draining Extremely FastiPhone GPS - 电池消耗极快
【发布时间】:2012-01-31 03:45:00
【问题描述】:

我们正在开发一个使用大量 GPS 的应用,我们无法优化电池寿命。

即使设备没有移动,也不会发生严重的电池消耗,根据代码,这种情况不应该发生。

代码如下:

locationManager = [[CLLocationManager alloc] init];
locationManager.distanceFilter = 100;
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
[locationManager startUpdatingLocation];

理想情况下,我们希望每 20 分钟触发一次 GPS(如果没有位置变化,则节省电池)或每 5 分钟触发一次位置变化。根据我的开发人员的说法,这是无法做到的

以前我们使用的是kCLLocationAccuracyBest,它消耗电池非常快,现在我们使用的是kCLLocationAccuracyHundredMeters

startUpdatingLocation - 是获取 GPS 坐标。还有另一个调用 startMonitoringSignificantLocationChanges 来获取 AGPS 坐标,我相信只要蜂窝塔发生变化就会返回坐标,因此会非常快地消耗电池。

distanceFilter - 设备在生成更新事件之前必须横向移动的最小距离(以米为单位)。根据距离过滤器,我们从设备获取 GPS 定位,然后将更新后的 GPS 坐标发送到服务器。

我们将不胜感激任何帮助 谢谢!

【问题讨论】:

  • 无论您做什么,长时间运行传感器,尤其是 gps,都会耗尽电池电量。如果你想延长寿命,那就降低你的采样频率。
  • 嗨 Maverick3,我们想每 20 分钟检查一次 GPS 位置以节省 GPS 电池。有没有办法实现这个?根据我的开发人员的说法,我们不能这样做。我会很感激任何提示。
  • 我建议使用 StartLocating 和 StopLocating 与计时器,然后进行分析以查看功耗如何变化。如果可以访问 Internet,另一种选择是使用位置提供商服务。但这不太准确。
  • 如果你用iPhone5S,那没关系,因为iPhone5S上的M7芯片处理很多

标签: iphone ios5 gps power-management


【解决方案1】:

如果您需要较高的精确度,您应该 startUpdatingLocation,一旦获得第一个修复,您应该 stopUpdatingLocation,然后 startMonitoringSignificantLocationChanges。

这对于大多数应用目的来说已经足够了。

【讨论】:

    【解决方案2】:

    您认为 startMonitoringSignificantLocationChanges 会很快消耗电池的想法可能是不正确的。移动信号塔的变化通常远低于 100 米的移动频率。即使在空闲且所有应用程序都处于睡眠状态时,iPhone 也会检查此事件。

    但是,在远离任何塔(仅 1 bar)时保持手机开机(例如关闭飞行模式)将耗尽设备的电池电量,无论应用是否进行任何位置监控。

    在现有的 iOS 设备上,如果不让设备保持开启并且您的应用在前台运行,那么应用不能纯粹基于计时器(例如每 20 分钟或每 5 分钟)触发位置监控,这会耗尽电池电量。

    【讨论】:

      【解决方案3】:

      还有另一个调用 startMonitoringSignificantLocationChanges 是获取 AGPS 坐标,我相信它会返回坐标 每当手机信号塔发生变化时,因此会真正消耗电池 快。

      这正是它的作用,但你会草率地得出关于所需功率的结论。 GPS 接收器和 WiFi 收发器可用于帮助确定位置,但它们是额外的设备,必须通电才能使用。但是像 iPhone 这样的手机无论如何都需要与最近的手机信号塔保持联系才能接听电话,因此使用手机信号塔作为位置信息的来源在电力方面应该是非常有效的。以下是CLLocationManager reference page-startMonitoringSignificantLocationChanges 的评价:

      此接口仅在检测到对 设备的相关蜂窝塔,导致更新频率降低 并显着降低功耗。

      它还将该服务描述为提供“极大的节能”,因此它似乎是您描述的工作的正确工具。当然,如果您同时使用标准位置更新机制,您将不会看到这种节能效果,因此请确保您没有同时使用这两种机制。

      理想情况下,我们希望每 20 分钟触发一次 GPS(如果没有 位置更改然后节省电池)或每 5 分钟(如果有) 位置变化。根据我的开发人员的说法,这是无法做到的

      这听起来像是有某种误解。如果这是您想要的,您当然可以每 20 分钟启动一次 GPS 以进行修复,尽管您无法从后台执行此操作。即使应用在后台运行,重要的位置更改服务也会通知您的应用,因此您的开发人员可能正在谈论后台更新。

      【讨论】:

        【解决方案4】:

        理想情况下,我们希望每 20 分钟触发一次 GPS(如果没有 位置更改然后节省电池)或每 5 分钟(如果有) 位置变化。根据我的开发人员的说法,这是无法做到的

        这可以使用每 20 分钟调用一次 startLocating(创建 CLLocationManager 并在其上调用 startLocating 的自定义方法)方法的 NSTimer 来完成。找到符合您喜好的准确度的 CLLocation 后,请务必致电 CLLocationManager 的stopLocating

        但是,这样做意味着您可能会在 20 分钟内使用完全关闭的位置。这取决于您计划如何使用该位置以及它需要有多精确,但也许您的开发人员所说的“不可能”是指您的应用始终需要用户的实际位置。

        【讨论】:

        • 嗨 Samvermette,您对如何以其他方式优化电池寿命有什么建议吗?当没有移动且应用程序处于后台时,我们可以不检查电池寿命 20 分钟。但是,当应用程序处于前台时,想要更新 gps 位置。感谢您的帮助。
        • 确保您致电stopLocating 并取消appDidEnterBackground 上所有正在进行的网络请求。 GPS 和天线是 iOS 设备耗电量最多的部分。
        • 这个解决方案的问题是,GPS 开启是消耗电池的原因。
        • 这个解决方案更大的问题是,当应用程序在 iOS 上后台运行时,您无法运行 20 分钟的计时器,而不会有更大的麻烦......
        猜你喜欢
        • 2017-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-18
        • 1970-01-01
        • 2016-03-10
        相关资源
        最近更新 更多