4

特定のタスクをバックグラウンドで実行したい。このタスクは完了するまでに数秒かかります (ファイルに GPS 位置データを書き込みます)。このタスクは 1 時間ごとに実行する必要があります。

SDK からわかるように、位置情報サービスを永久に実行しない限り、バックグラウンドで何かを開始する方法がありません。このサービスが実行されると、ときどきイベントが発生し、これらの呼び出し中にコードを実行できます。試してみましたが、可能な限り最小限の精度でも、バッテリーがすぐに減ってしまいました。

そこで、位置情報サービスを 1 時間ごとに数秒間実行する方法を探しています。残りの時間は、位置情報サービスを実行したくなく、バッテリーを使用したくありません.

ここで助けてもらえますか?ありがとう、

ゲーナ

4

2 に答える 2

3

1 時間ごとに実際に知りたいことは何ですか? 場所を正確に特定しようとしていますか、それとも電話が大きく移動したかどうかを特定しようとしていますか? startMonitoringSignificantLocationChangesは、電話が「大きく」移動したときに通知します (これは通常、基地局の変更を意味します)。都市では、これは非常に頻繁に発生する可能性があります。startMonitoringForRegion:desiredAccuracy:指定された半径の外に移動した場合にのみ通知します。

startMonitoringSignificantLocationChangesかなり安いです。それは主にセルアンテナに依存しており、とにかく一般的にはオンになっています。1 時間に 1 回以上起動する場合は、いつでも処理をスキップして戻ることができます。しかし、特に地方では、1 時間に 1 回電話がかかってくるという保証はありません。

VoIP アプリの場合は、コードを実行するときに定期的な「チェックイン」間隔を登録できます。ただし、位置情報アプリではこれを行うことはできません。

Energy Diagnostics インストゥルメントを使用してコードをプロファイリングしましたか? 実際に食べる時間と力は何ですか?ラジオ、CPU、ディスクを噛んでいますか?

編集

アプリが終了しても、重要な変更は引き続き実行され、iPhone の上部ツールバーのパーセンテージの横に小さな方向矢印アイコンが残ります。ユーザーは、アプリを終了した後もアイコンが残っていると不満を漏らしています

アプリが終了した後、重要な変更に登録していた場合は、それらに応じて再起動されることを期待します. 解雇された場合に登録を解除したい場合は、メソッドに追加できstopMonitoring...ますapplicationWillTerminate:。これが呼び出される保証はありませんが、実行するのは良いことです。ユーザーが直接終了し、中断されていない場合に呼び出されると思います (テストしていません)。

繰り返しになりますが、セルがカバーされている限り、大幅な場所の変更はバッテリー寿命の点で非常に安価です。GPS を強制的にオンにしておくべきではありません。

于 2011-09-08T14:39:02.330 に答える