[iPhone SDK] Significant-change Location Service の挙動
iPhoneで位置情報取得を連続して行うと、あっという間に電池が無くなってしまう。これは、位置情報取得のためにGPS関係のデバイスを軒並み起動しているためらしい。
このため、iOS4より、Significant-change Location Service という便利なものが用意された。
ずっと測位を続けていると電池がすぐに無くなるが、このサービスを startMonitoringSignificantLocationChanges: で開始すると、前回の測位から大きな距離の移動があった場合にのみ、locationManager:didUpdateToLocation:fromLocation: を呼び出してくれる。
バックグラウンドに入っていても通知されるし、バックグラウンドに入っていつの間にか他にアプリに押し出されて終了してしまっても、自動的に再起動をしてくれるとドキュメントには書かれている。
しかしiOS4 Betaの間はなかなか動作が安定せず、その後もなかなかまともに動いていなかったようなのでそんなにきっちり調べていなかったのだが、そろそろまじめに挙動を調べてみようと思う。
同様の疑問を持った人がいて、StackOverflow に質問をしてくれていた。
Behaviour for significant change location API when terminated/suspended? – Stack Overflow
この人によると、startMonitoringSignificantLocationChanges: を呼び出してバックグラウンドに回ったアプリは、たとえ終了させられたとしてもiOSから通知を受けられるが、app delegate のcallbackは全く受けられないという。
さて、実際どうなのかをアプリにログ書き出し機能を入れて試してみる。
位置情報取得系アプリは、実際に移動しないとデバッグができないのがつらい。
いや、何か回避する方法があるのかな。
2010/10/07 試験1
試験に使ったのは、自作の Log Locations。
これは起動しておくとバックグラウンドでSignificant-change Location Serviceを使って自動的に測位をしていくライフログ的なアプリなのだけれども、バックグラウンドに入れていろいろなアプリを起動すると、いつの間にかバックグラウンドからいなくなっており、それ以降ログがとられない。
しかし、Appleのドキュメント通りならば終了させられてもまた長い距離を移動すれば自動的に起動させられるはず。
これを、最近検索して見つけた iMemoryGraph を使って確認してみた。
で、結果としては確かにメモリから追い出されて終了させられたことをiMemoryGraphのプロセス一覧画面で確認したのだが、帰宅途中に見たら確かに復活していた。
ということで、確かに起動はしてくれているようだ。
なのに、なぜ測位結果が残らないのかを次は調べてみよう。
追記 2011/07/13
調べてみよう、と書きつつその後の結果を書いていなかったのでいまさらながら書いてみる。
その後、ログを出力するコードを入れて毎日通勤時に動かしてみてログを確認することを繰り返して、startMonitoringSignificantLocationChanges: により自動起動された場合、起動されるけれどもごく一部のコードしか呼ばれないことが判明した。
そして、起動されてもすぐにバックグラウンドに入ることもわかった。
確かに、大きな距離移動して自動起動されたとしてもUIが表示されるわけではないし、フォアグラウンドに出てくるわけでもないので、呼ばれていたのは
– (void)applicationDidEnterBackground:(UIApplication *)application {
だった。
このため、ここで CLLocationManager をallocして、一通りの初期化をする必要があった。
また、すぐにバックグラウンドに入ってしまうので startMonitoringSignificantLocationChanges: を呼ぶ必要もあった。
これらのことを実行することで、バックグランドに入り、メモリ不足でアプリ終了されてもその後起動してログをとり続けることができるようになったようだ。
関連記事
-
-
LogLocations 1.4.0 写真表示対応
行動ログは取りたいが、何も操作したくない。という自分のようなずぼらなログ好きユーザ向けのアプリ、L
-
-
The file XXX couldn’t be opened because you don’t have permission to view it.
The file XXX couldn't be opened because you d
-
-
Reject 履歴 おんぷちゃん 1.9.0
久しぶりに おんぷちゃん をアップデートしようとしたところ、"Guideline 2.3.7 - P
-
-
英単語学習アプリ EverLearn 1.4.0 を公開しました
ようやく、iOS7 に対応した EverLearn 1.4.0 を公開しました。 i
-
-
[iOS SDK] UIAlertView が消えた後にキーボードが表示される
昔書いたコードで、UIAlertView に setAlertViewStyle で UIAlert
-
-
iOS 16 GM版アップデート
遅ればせながら iPhone 11 Pro Maxを iOS16 GM版にアップデートを行う。
-
-
リズムくんHD 1.2.1 で iOS11に対応しました
iPad用のリズムくんHD のiOS11対応が遅れてしまったため、2017年11月あたりからiOS1
-
-
おんぷちゃん for iPad 2.0.0リリース
あけましておめでとうございます。今年もよろしくお願いします。 2022年8月にはだいたい完成
-
-
詳解 Objective-C 2.0 改訂版 2010年12月17日発売
まだ書店で遭遇できてないけれども荻原さんの詳解 Objective-C 2.0の改訂版が発売されてい
-
-
タッチ! アメリカ地図 1.1 アップデート
タッチ! アメリカ地図のアップデート (バージョン 1.1) が今朝公開されました。 アメリカの州は
- PREV
- インド式計算マスター
- NEXT
- 楽譜をファイルするのに便利 バンドファイル