2011-09-08 74 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'不會取消註冊嗎? –