2013-12-07 32 views
2

我有一個應用程序,每隔K分鐘需要一次準確的位置更新 - 即使在後臺也是如此。重大的位置更改更新不足以滿足我的需求,因此我需要使用CLLocationManagerstartUpdatingLocation方法並使其永久運行。iOS7:推遲更新或將精度設置爲低準確度會更節能

我想用盡可能少的功率,同時儘可能仍然得到我的週期性位置更新。似乎這兩種節省能量的選擇是(臨時)將CLLocationManager的desiredAccuracy屬性設置爲最不準確的設置(例如3英里),或者通過allowDeferredLocationUpdates*方法推遲位置更新。然而,這兩種技術是互不兼容的,因爲延期更新需要高精度設置(最準確)。

沒有人知道哪種方法更省電,或者,如果有另一種方式,以儘量減少用電量,同時還獲得定期更新(甚至在背景中)。

+1

非常有興趣聽到你決定用這個做什麼?目前我有一個粗略的設置(3公里),每3分鐘運行一次「beginBackgroundTaskWithExpirationHandler」(不知道這對蘋果公司是否可行),檢查返回的準確性 - 如果不可接受提高所需的準確度並沖洗/重複,直到我以期望的準確度獲得我的位置。 – Shocks

回答

0

延遲更新使用大大更少的功率,但它需要硬件支持,所以它不是始終可用。它通過在硬件中緩存位置數據,然後一次將其傳遞到您的應用程序(省電不經常激活應用程序)來工作。它還提供基於時間的配置。

監測的顯著變化(startMonitoringSignificantLocationChanges)再次通過不使用GPS(使用手機信號塔代替)使用更少的電力,所以它再次需要特定的硬件支持。

所需的精度簡單地設置低並不一定使用上述任何一種功能,因此您應該檢查在運行時使用的設備能力爲準功能都可用。 AFAIK沒有統計發佈哪些硬件支持的選項使用較少的功率。

+0

問題是延期更新是否優於低準確性更新(或者是否有第三種選擇)。延期更新可以節省一些功率AFAICT,但我的直覺是,由於它需要GPS通電,它們仍然比低精度更新耗費更多的功率。 –

+0

延遲更新通過每秒不喚醒CPU來節省大量電源。是的,GPS持續運行,但與不推遲更新相比,它仍然是**顯着的改進。 – progrmr

3

你應該做兩個延期更新減少desiredAccuracy

而且每K分鐘,檢查當前CLLocation值,如果它的精度可以接受,然後使用它。如果不將desiredAccuracy減少到30分鐘(或最佳或任何最大值是可接受的)爲直到 30秒。這將打開GPS芯片30秒,如果您獲得了可接受的準確位置,請使用該位置並立即將desiredAccuracy恢復到3000(kCLLocationAccuracyThreeKilometers),直到下一個K分鐘時間開始。如果在30秒內沒有得到可接受的準確度,那就太糟糕了,請使用您在30秒內得到的最好的CLLocation,返回3000m的準確度並在K分鐘後重試。

請務必在how to configure deferred updates閱讀起來。讓它們工作並不容易,但使用它可以讓你在GPS開啓30秒的30秒內喚醒CPU,而不是30次,這也節省了大量電池。

延期更新需要iPhone 5或更高版本以及iOS 6或更高版本。您可以使用deferredLocationUpdatesAvailable來確定設備是否支持它。

相關問題