[iPhone SDK] Significant-change Location Service の挙動

公開日: : 最終更新日:2011/09/26 iPad, iPhone ,

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: を呼ぶ必要もあった。
これらのことを実行することで、バックグランドに入り、メモリ不足でアプリ終了されてもその後起動してログをとり続けることができるようになったようだ。

iMemoryGraph 1.5(無料) for iPhone

iPhone、iPod touch および iPad 互換 iOS 3.1.2 以降が必要

iMemoryGraph 1.5
カテゴリ: ユーティリティ
価格: 無料 App
更新:2010/08/20

imagesimages

関連記事

no image

英単語リスト探し中 → GSL と AWLを発見

今作っている英単語学習用iPhoneアプリは基本的には自分で英単語を入力して問題にするのだけれども、

記事を読む

no image

[iPhone SDK] sqlite 学習中。FMDB を知る。

SQLite入門 第2版西沢 直木 翔泳社 2009-05-19売り上げランキング : 17582

記事を読む

no image

AirMac Extreme Base Station がほしい 2011/05/07

自宅の無線LANルータが不安定なので、AirMac Extremeを買おうかと悩み中。 自宅にApp

記事を読む

Apple Developer Program 更新2016

そろそろ期限が切れるので、Apple Developer Program - Apple Devel

記事を読む

Apple Special Event September 2018

今年も新型iPhoneを発表するアップルのスペシャルイベントが2018年9月13日2時AM(12日1

記事を読む

英辞郎第7版からアルクのSVLを EverLearn に取り込む方法

英辞郎 第七版(辞書データVer.136/2013年1月8日版)アルク企画開発部 アルク 2013

記事を読む

no image

ついにヒレガス本第3版が出るらしい

以前から、いつかは出るかな、いやもういまさらでないかなと思っていたヒレガス本の第3版が11月についに

記事を読む

[WatchKit] How to update complications

Apple Watch の文字盤上に、自分のアプリの情報を載せることができる仕組みが、Complic

記事を読む

no image

これは便利 iPhoneプログラミングUIKit詳解リファレンス

Amazonでの評判も良いし、書店で立ち読みしていくつか有用な情報を見つけたので、iPhoneプログ

記事を読む

EverLearn Ver.1.6 を公開しました。今回はiPhone6 Plus 対応+英英辞書追加

残念ながらあまり売れていないiPhoneアプリ EverLearn ですが、自分的には毎日使っている

記事を読む

Message

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

自宅をリフォームしてみた

数年前から奥さんに家のリフォームを希望されていた。 ガ

iOS 16 GM版アップデート

遅ればせながら iPhone 11 Pro Maxを iOS16 G

Apple Event Sep 2022 Far Out

毎年恒例の Apple Event が 2022/09/07 に行わ

MY HER-SYS の使い方

子どもが新型コロナウイルスに感染し、隔離を試みましたが結局自分も感染

Transcend TS-HUB5C を買ってみた

前回 USB Type-C ハブを買って返品してしまったので、再度検

→もっと見る

PAGE TOP ↑