LocationManager.requestLocationUpdates()の挙動を深追いしてみた

あとでちゃんと書き直すけど、だいたいこんな感じ。このエントリを書いてから、色々知見があったので、改めて新しくエントリを書く予定。

  • LocationManager.requestLocationUpdates()の第一引数にはminTimeを指定するようになっている。
    • minTimeを指定すると、GPSからの通知の最低時間間隔をミリ秒で指定できる。
    • リファレンスには"Background services should be careful about setting a sufficiently high minTime so that the device doesn't consume too much power by keeping the GPS or wireless radios on all the time. In particular, values under 60000ms are not recommended."(バックグラウンドサービスで動かすときは60000ms以上を指定すると良いよ)と書いてある。
  • だが、Androidのバージョンによって大きく挙動が異なる。少なくともAndroid2.1ではそこそこ期待通りの動きをするが、Android2.2ではminTimeで指定した時間未満でイベントが通知されてくる。
  • ソースを読んだ結果、minTime>=60000とminTime<2000の場合のみ、期待に近い挙動をするはず。
    • minTime>=60000の場合、都度GPSをオフにするようになっている。
      • ただしオフにするからといって、バッテリーの持ちがよくなるかは微妙。長時間GPSが切れていると、A-GPS通信が発生する可能性が高いため。
    • 大抵の場合、割り切ってminTime=0を指定するのが妥当ではないか。どうせminTime=10000のような中途半端な値を指定しても、期待通りに動かないし。
      • イベントが頻繁に通知されてくるので、自分で不要なイベントは無視する。