[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

関連記事

Apple Watch用バッテリーロガーを公開しました

1年前に開発し、App StoreにSubmitしたものの Rejectされ続けていたアプリをその

記事を読む

新作アプリReibunを@marie__100さんに紹介していただきました

@marie__100さんに英語学習アプリ Reibunを紹介いただきました。ありがとうございました

記事を読む

au で iPhone5 を下取りに出してきた

今ならiPhone 5を32000で買い取りしてもらえるということで、au Shop に行っ

記事を読む

iOS14からおんぷ先生と接続できない

下記の問い合わせがあり、調べたところ、iOS14からおんぷちゃんとおんぷ先生がBluetoothで

記事を読む

no image

Xcode + Assembla で Subversion でソース管理

ソースコードはUSB HDDにバックアップしているが、震災が来たらHDDを持って逃げられるとは思え

記事を読む

no image

iPhone SDKでユーザデータをローカルに保存したい

一応5日より次のiPhoneアプリの開発を始めた。 前回のアプリはアプリの設定をちょこっとローカルに

記事を読む

iOS9から[NSLocale preferredLanguages] の出力が変更された

以前ツイートした内容を自分で忘れていて検索する羽目になったのでブログにも書いておく。iOS9から、

記事を読む

[iOS SDK] 実装ファイルでメンバ変数を宣言する

Xcode 4.x を導入したらいろいろ見慣れない記法があったので、いまさらながら一部まとめてみた。

記事を読む

no image

見たかった映画「ソーシャル・ネットワーク」を見る複数の方法

かなり見たかったけれどもふたごが小さくてとても見に行けなかった映画、「ソーシャル・ネットワーク」がも

記事を読む

no image

最近読んだ本: これでiPhoneアプリが1000万本売れた 南雲 玲生著

周りでおもしろいと言っている人がいたので買ってみた。2011/05/21発売。 株式会社ユードーの南

記事を読む

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Ember Mug 2のACアダプタをUSB Type-Cに変えてみた

冬になると活躍する Ember Mug 2 の充電器は付属のACアダ

Wi-Fi6Eルータ TP-Link AXE5400購入

Wi-Fi6E を試してみたくなり、TP-Link AXE5

児童手当 認定請求書申請 2024 「請求者が養育をする18歳に達する日以降の最初の3月31日までの子の数」とは?

2024年に受給していない人には手紙が届くらしい。 電子申請も

Vision Proアプリ開発本 8/24、8/26に発売

Vision Proアプリ開発入門 P400が 8/24 に発売、V

Developer Strap が日本でも購入可能に

USアカウントでしか購入できなかった Vision Pro 用 De

→もっと見る

PAGE TOP ↑