これは、startMonitoringSignificantLocationChangesを使用したアプリの動作を説明するCLLocationManagerドキュメントのセクションです。
このサービスを開始した後でアプリケーションが終了した場合、新しいイベントが到着すると、システムは自動的にアプリケーションをバックグラウンドで再起動します。このような場合、アプリケーションデリゲートのapplication:didFinishLaunchingWithOptions:メソッドに渡されるオプションディクショナリには、場所イベントのためにアプリケーションが起動されたことを示すキーUIApplicationLaunchOptionsLocationKeyが含まれています。再起動しても、ロケーションマネージャオブジェクトを設定し、このメソッドを呼び出してロケーションイベントの受信を継続する必要があります。位置情報サービスを再起動すると、現在のイベントがすぐにデリゲートに配信されます。さらに、ロケーションサービスを開始する前でも、ロケーションマネージャーオブジェクトのロケーションプロパティには最新のロケーションオブジェクトが入力されています。
私の理解では、アプリの終了は、(あなたが呼び出していない場合、私が想定した場合ということですので、stopMonitoringSignificantLocationChangesをからapplicationWillTerminate)あなたが覚めてしまいますUIApplicationLaunchOptionsLocationKeyのにパラメータdidFinishLaunchingWithOptions:アプリケーション。その時点でCLLocationManagerを作成し、startMonitoringSignificantLocationChangesを呼び出して、バックグラウンドでの位置処理を限られた時間実行します。だから私はこのビットで大丈夫です。
前の段落では、アプリが終了したときに何が起こるかについてのみ述べており、アプリケーションが一時停止したときに何をするかを示唆していません。didFinishLaunchingWithOptionsのドキュメントには次のように書かれています。
アプリケーションは、バックグラウンドで位置の更新を追跡し、パージされ、現在は再起動されています。この場合、ディクショナリには、新しい場所イベントのためにアプリケーションが再起動されたことを示すキーが含まれています。
終了後、(場所の変更により)アプリが起動された場合にのみこの通話を受信することを提案します。
しかし、上の段落の大幅な変更サービスにおける位置認識プログラミングガイドが言うには、以下のい:
このサービスを実行したままアプリケーションを一時停止または終了した場合、新しい位置データが到着すると、サービスによってアプリケーションが自動的に起動します。ウェイクアップ時に、アプリケーションはバックグラウンドに置かれ、位置データを処理するために少し時間が与えられます。アプリケーションはバックグラウンドにあるため、最小限の作業を行い、割り当てられた時間が経過する前にアプリケーションが戻るのを妨げる可能性のあるタスク(ネットワークのクエリなど)を回避する必要があります。そうでない場合、アプリケーションが終了する可能性があります。
これは、アプリが一時停止されている場合は位置データで目覚めていることを示していますが、どのように起きているかについては言及していません。
- んUIApplicationDelegateは、私がバックグラウンド状態にサスペンド状態から再開していますことを私に言って、コールバックを取得しますか?
- (アプリが中断されたときにフリーズドライされた)ロケーションマネージャーは、locationManager :didUpdateToLocation:fromLocationコールバックの受信を開始しますか?
- アプリケーションの状態をチェックし、バックグラウンドモードの場合に最小限の処理を行うコードをdidUpdateToLocationメッセージに実装するだけでよいですか?
これを書いている最中、私は自分の質問に答えたばかりかもしれないと思いますが、これについての私の理解をより知識のある誰かに確認してもらうと素晴らしいでしょう。