私は同様のプロセスを実験し、次のように、大幅な場所の変更と地域の監視の両方を使用して最善を尽くしました。何度も繰り返した結果、現在、バッテリー寿命への影響はほとんどなく、処理の信頼性もかなり高いと感じています。
大幅な場所の変更を使用して、通知をフィルター処理し、現在の位置から限られた半径内にあるもののみに領域を設定するメソッドをトリガーします。
私の経験に基づいて、重要な場所の変更は約 3 ~ 4 マイル離れて発生することが予想されます。これは大きく異なる可能性がありますが、それ以上のものを見たことを思い出すことはできません. これにより、ユーザーが高速道路に乗ったときにかなり予測可能な、町中での処理が非常にまれになります。領域サイズ、更新半径、位置情報サービスの感度設定について、さまざまなバリエーションを試しました。
登録できる地域の数は限られていることに注意してください。その制限が正確に何であるかはどこにもわかりませんでしたが、一部のユーザーは、1 つのアプリが 10 を超える地域を登録することを期待すべきではないと述べています。私自身、その数字を立証するための参照を見つけていません.10以上を登録することもあります.
デバイスがかなりの時間高速道路の速度で移動しているのが見られる場合、リフレッシュのために半径と最小距離を増やして遊んでみました。これは、不必要な処理サイクルでバッテリーを浪費している可能性があると感じる状況です. 実際の使用では問題にはならなかったようですが、とにかく効率を最大化するように努めています。
あなたの特定の質問に関連する私の経験。
1-あなたの場合、トリガーが通知するために考慮しようとしている場所にどれだけ近いかによって異なります。ユーザーが数マイル以内に到達したとき、またはユーザーが町に到着したときに通知する場合、これは実際に機能する可能性があります。ユーザーが場所から数メートル以内に入ったときにトリガーしたい場合、これは適していません。私の経験では、場所の大幅な変更をリッスンしても、一般的にバッテリー寿命に大きな影響はありません。もちろん、イベントの受信時に実行している処理とネットワーク アクティビティの量も別の要因です。デバイスがどれだけ移動したか、最後の場所が受け入れられてからの時間を確認します。私の場合、毎回すべてを更新する必要はなく、それに応じて反応を制限しています。
2- 重要な場所の変更に関する私の経験は上記のとおりですが、すべての文書から、使用されるさまざまな信号の条件と可用性ほど、設定された距離の問題ではないことが明らかになっています。都市環境では、より予測可能であり、広いオープンスペースでは少ないと思います. 私の経験のほとんどは前者です。
3- 大規模なグーグル検索、ドキュメントの流し込み、および多くの情報に基づいた推測から、重要な位置の変化は、ユニットが利用できるすべての信号の魔法の組み合わせによって決定されると結論付けました. さまざまな精度で位置をブロードキャストする Wi-Fi 信号があり、携帯電話基地局は通常、それらがどこにあるかを認識しています。位置情報サービスは、これらすべてとそれぞれの信号強度を使用して、デバイスが「かなりの距離」をいつ移動したかを判断します。計算が条件によって異なり、精度と消費電力のバランスを改善し続けるにつれて変更される可能性があることは明らかだと思います。したがって、あいまいな仕様です.
4- 質問 1 に示されているように、重要な場所の変更だけを使用できると判断する可能性のある考慮すべき要素がありますが、いずれにせよ、地域の監視が目的に最も適していると思います。おそらく両方の組み合わせが適切です。私自身の用途に大満足で使用しています。
5- 場所が大幅に変更されると、アプリが起動します。バックグラウンドで実行することを意図したメソッドでは、いくつかのガイドラインに従い、制限を認識する必要があります。バックグラウンド メソッドを beginBackgroundTaskWithExpirationHandler および UIBackgroundTaskInvalid 呼び出しでラップします。スレッドのブロッキングに注意してください。ドキュメントと位置情報処理のガイドライン全体をお読みください。
6-私のお勧めは上記の通りです。その他の考慮事項は、一般的な位置情報サービスの使用にあります。ある種のカスタム ハンドラーを作成する必要があります。サービスを使用しているときでも、受信したすべてのメッセージに反応したくありません。変更、正確さ、最新性、およびジャズが必要な頻度でのみ応答するすべてをチェックする必要があります。この一連の投稿は、基本を理解する上で非常に貴重であることがわかりました:ロング ウィークエンド Web サイトからのパート 1/3
7- 上記のとおり、登録できる地域の数にはシステム全体の制限があると理解しています。その数が正確にはわからないため、他のアプリケーションによって設定されている他の数に応じて、アプリが多かれ少なかれ許可される可能性があると思います。私の経験では、設定した半径内の 10 ~ 15 のリージョンを定期的に登録および削除しています。最後の入力が最初に削除または拒否されると想定しているため、最も近いものから最も遠いものへと順番に設定しました。その他の考慮事項 - 地域識別子はグローバルであるため、一意でない場合は、以前の地域を同じ名前に置き換えます。-領域のサイズとマージンは、特定のニーズに合わせて最適なものを見つけるために実験する必要がある設定です。