0

私は、ユーザーを追跡できるバックグラウンドモードで実行されるアプリケーションを作成しており(バックグラウンドモードで場所を更新することがあります)、リージョンモニタリングを使用して、近くのポイントをユーザーに通知します。リージョンモニタリングからアプリケーションを再起動する機能は使用しません。

現在、applicationWillTerminate:メッセージを受け取った後、位置情報の更新を停止し、地域の監視からすべてのポイントを削除します。アプリケーションの奇妙な動作に気づきました。マルチタスクメニューでアプリケーションを強制終了しようとすると、次のメッセージが(以下の順序で)アプリケーションに配信されます。

  • applicationWillTerminate:
  • applicationDidEnterBackground:
  • (時々)もう1つlocationManager:didUpdateToLocation:fromLocation:

このアプリケーションのバックグラウンドロケーションモードを登録しないと、代わりに強制終了されます。

ユーザーがマルチタスクメニューでアプリケーションを強制終了し、リージョンモニタリングからメッセージを受け取らないようにした後、アプリケーションを他のアプリケーションと同様に終了させたい(とにかくその時点でポイントは追跡されない)。それでも、バックグラウンドロケーションモードを使用できる必要があります。目的は、バッテリーの使用量を最小限に抑えることです。それを達成するために私は何をすべきですか?

また、なぜアプリケーションはapplicationDidEnterBackground:後に受信するのapplicationWillTerminate:ですか?マルチタスクメニューからシャットダウンした後も実行中ですか?

4

2 に答える 2

2

最後に、私はそれを実験的にテストし、ドキュメントでカバーされているすべてが真実であるかどうかを確認しました。そうです。これらは結果であり、ドキュメントで完全には指定されていません。

UIBackgroundModesアプリケーションがのようにサポートしていない場合、locationマルチタスクメニューでアプリケーションを終了した後(受信後)に強制終了されます(シグナル9を受信しますapplicationWillTerminate:)。

アプリケーションがバックグラウンドモードをサポートしている場合、アプリケーションはlocationを受け取りapplicationWillTerminate:applicationDidEnterBackground:一時停止されます。アプリケーションを次に起動する前に、アプリケーションはサイレントに終了します。

アプリケーションでリージョンを監視していて、マルチタスクメニューで終了した場合は、オプションを使用してリージョンイベントで再起動されUIApplicationLaunchOptionsLocationKeyます。その後、ユーザーがアプリケーションを起動した場合、アプリケーションは終了せず、applicationDidBecomeActive:およびその他のメッセージの取得を開始します。

メソッドですべてのリージョンの監視を停止した場合、予想どおり、アプリケーションは終了後にバッテリーを消耗していませんapplicationWillTerminate:。ただし、リージョンの監視を停止せず、リージョンの監視精度を高く設定している場合は、終了しても(iOSがそれらのポイントをアクティブに監視しているため)バッテリーを大量に消費しています。

終了後のバックグラウンドロケーションモードが設定されたアプリケーションの動作は、リージョンを監視するかどうかに関係なく、実際には同じです。それだけが最初のケースでは、リージョンに入るというメッセージを受け取ったり、バッテリーを消耗したりすることはありません。

于 2012-08-23T10:42:23.487 に答える
0

これらの通知は常にアプリケーションの強制終了プロセスの一部として送信されるため、常にこれらの通知を受信します(したがって、これらのメソッドを入力します)。そして、はい、これらのメソッドが実行されているとき、アプリケーションはまだ実行されていますが、メソッドが終了した後は実行されなくなりますapplicationWillTerminate

私があなたが達成しようとしていることを理解しているなら、あなたは単にapplicationDidEnterBackground:メソッドのあなたの要件に応じて監視を停止するべきです。

お役に立てば幸いです。

于 2012-08-22T14:17:17.553 に答える