我已經嘗試過一個類似的過程,並使用了以下重要的位置更改和區域監視功能。經過多次迭代後,我目前對電池壽命和相當可靠的處理的影響很小。
我使用重要的位置更改來觸發過濾通知的方法,僅爲當前位置的有限半徑內的區域設置區域。
根據我的經驗,相當大的位置變化可能會發生在相距約3-4英里的地方。這可能會有很大的差異,但我記不起來了。這使得在城鎮周圍非常罕見的處理,當用戶上高速公路時相當可預測。我嘗試了多種區域大小,刷新半徑和位置服務敏感度設置。
請記住,您可能註冊的區域數量有限。我找不到任何限制,但有些用戶聲稱,任何單個應用程序都不應該期望註冊更多的10個區域。我自己沒有找到任何證據來證明這一數字,我有時註冊超過10個。
我玩過增加半徑和刷新的最小距離,當它看到設備以高速行駛時,持續時間。這是一種情況,我覺得我可能會浪費電池,造成不必要的處理週期。在實際使用中,它似乎沒有問題,但我一直試圖在任何情況下最大限度地提高效率。
我的經驗與您的具體問題有關;對於你的情況,這取決於你想要觸發通知的位置有多接近。如果您通知用戶幾英里之內或用戶到達城鎮時,這實際上可能是可行的。如果您想在用戶進入某個位置數米範圍內時觸發,這不適合您。根據我的經驗,聽取重大位置變化通常不會對電池壽命產生重大影響。當然,在接收事件時你正在做多少處理和網絡活動是另一個因素。我檢查設備移動了多久,距離上次位置被接受了多少時間。在我的情況下,沒有必要每次都刷新一切,我相應地限制了我的反應。
2-我對重要的位置變化的經驗如上所述,但所有文件都明確表示,它不是設定距離的問題,而是使用各種信號的條件和可用性。我想在城市環境中,它在更寬廣的空曠空間中更具可預測性,更少。我的大部分經驗都來自前者。從廣泛的谷歌搜索,通過文檔和大量的知情推測,我得出結論,重大的位置變化是由所有可用信號的組合的神奇組合決定的。有無線信號廣播他們的立場不同程度的準確性和手機塔通常知道他們在哪裏。位置服務使用所有這些信號以及各自的信號強度來決定設備何時行進了「顯着距離」。我認爲很明顯,計算結果會隨着條件的變化而變化,並且隨着精度和功率使用之間的平衡不斷提高,可能會發生變化,因此模糊的規格會有所改變。
4-如問題1所示,需要考慮的因素可能會決定您可以單獨使用顯着的位置更改,但我認爲在任何情況下區域監測都最適合您的目的。可能兩者的組合都是爲了。我對自己的應用非常滿意。
5-重大的位置更改將喚醒您的應用程序。您必須遵循您的方法中的一些準則,以便在後臺運行並注意限制。在beginBackgroundTaskWithExpirationHandler和UIBackgroundTaskInvalid調用中包裝您的後臺方法。注意線程阻塞。完整閱讀文檔和位置處理指南。
6-我的建議如上。其他考慮因素一般在於您使用位置服務。你需要製作一個自定義的處理程序。即使您使用該服務,也不希望對收到的每條消息作出反應。您必須檢查變化,準確性,新近性以及所有爵士樂響應的頻率。我發現這一系列的帖子在獲取基礎知識方面是非常寶貴的:Part 1 of 3 from the Long Weekend Website
7-如上所述,我的理解是,可以註冊的區域數量存在系統範圍限制。我認爲,由於他們沒有確切地告訴你該數字是什麼,它可能會讓你的應用或多或少取決於其他應用程序設置了多少其他應用程序。根據我的經驗,我定期在我設定的半徑範圍內註冊並刪除10到15個區域。我按照從最近到最遠的順序設置它們,因爲我認爲最後一個將被首先刪除或拒絕。 其他考慮因素 - 地區標識符是全球性的,所以如果你的地址不是唯一的,它會替換以前地區的同名。 - 區域大小和邊距是您需要嘗試的最佳設置,以滿足您的特定需求。
哪裏的消息從何而來?它們是通過網絡傳遞的嗎?那麼每天的新地區呢? – 2012-07-29 13:04:47