トップ地図アプリMapX > 地図アプリMapX システム再設計

地図アプリMapX システム再設計

はじめに

残念ながら、AndroidのActivityとServiceがまだよく理解できていない。

地図アプリ Map は時々ダウンすることがある。 起動しなせばよいので、個人的使用ではそれほど致命的エラーではない。 しかし、快適に使うためには、このようなことはあってはならない。

バッテリ消費を極力抑えるために、複雑な仕様になっているようである。

Androidはアプリとプロセスが同一ではない。 多分、Deep Sleep ではプロセスの状態を保存して、プロセスは終了する。 アプリは終了したわけではない。目覚めたとき、プロセスが生成され、保存された状態を復元する。

地図アプリでは、ブロックデータやタイル画像データをキャッシュしているが、 これらはプロセス終了で消滅するのであろう。 したがって、長時間、地図アプリMapを動かさなかった後に、動かすと、データが消滅しておりダウンするのであろう。

例えば、onPause でキャッシュを廃棄して、onResume で新たにキャッシングしなおす必要があるのであろう。

しかし、一時的に別アプリを開き、また、地図アプリに戻るような場合には、キャッシュの廃棄は望ましくない。 この後、長時間、地図アプリが利用されないと思われるときにキャッシュを廃棄すべきであろう。 再開時に、キャッシュが null でないかどうかだけで、キャッシュの有効性を判断できるか、試してみたい。

位置情報取得

細部の変更はあるが、基本的には地図アプリMapのプログラムを踏襲した。

GPSロガー部を独立アプリにしたこともある。メンテナンスしやすい面もあるが、その日のGPS軌跡の表示が少し複雑になる。 GPS(ロガー)アプリは24時間稼働で、Mapアプリは自由に停止が許されるとした場合、再起動時にその日のGPS軌跡データが必要となる。 GPSアプリのファイル書き込みは間欠的とした場合、その日のログファイルの読み込みだけでは不十分であり、 現在、GPSアプリのメモリに蓄積している分も受け取る必要がある。

GPSアプリからMapアプリへの位置情報のbroadcastについてはほぼ同じであるが、MapアプリからGPSアプリにリクエストを送るために、 逆方向の broadcast も必要となる。

タイルの状態管理

リクエストをキューで管理していたことがある。この場合、二重登録を避ける仕組みが必要になる。 現在は、フラットな配列でタイルのキャッシュを管理している。この状態管理が多少複雑になる。

ディープスリープ対応処理

長時間経ってMapXを開くと、一部のタイルが描画されないことがある。メモリの使用量が大きいとき起きるようである。 少しスクロールすると、全画面のタイルが描画される。

onPause/onResumeでの退避/回復は頻度が高いため、バッテリ消費が増える可能性があるが、 onDestroyではキャッシュを廃棄し、リスナーやレシーバーの登録を取り消した方がいいだろう。 強制停止の場合、サービスも停止するが、onDestroy() ではサービスの停止は行わない。

onDestroy() で System.exit(0) を実行した場合には、位置情報取得Service も停止する。

多分、 System.exit(0) は強制停止に相当し、その後の起動で static final Block[] blocks = new Block[MaxBlocks+1]; によるメモリ確保も有効に働くものと推測される。

onDestroy() でキャッシュやリスナー/レシーバーなどを個々に開放し、 onCreate() でキャッシュ確保、リスナー/レシーバー登録を行う場合、 static final Block[] blocks = new Block[MaxBlocks+1]; などもやめて、 初期化処理でメモリ確保を行う必要があるかも知れない。

Serviceはとめず、Activityだけを終了させるにはどうするか? おそらく System.exit(0) を実行すると、それでシステム終了であろうから、その後に startService(new Intent(MainActivity.this, LocationUpdatesService.class)); を置いても無視されるだろう。

以前のように、位置情報取得サービスを地図アプリMapXとは分離して、アプリGPSのServiceとした場合には、 MapXを終了させても GPSサービスは停止しない。

もう少し検討するが、場合によっては再び GPSサービスを独立させることも考えよう。


まず、System.exit(0)の後で、startService を実行できないことを確認した。

static final Block[] blocks = new Block[MaxBlocks+1]; のような初期化は 初期化の順序が分からない。初期化の順序をコントロールできるように、 このような初期化はやめて、初期化を1か所にまとめる。

onCreate() において new で確保したメモリは全て onDestroy() で解放する。

開発履歴

2023.11.11 レンダリングが行われない

夜になって突然レンダリングが行われなくなった。タイル画像ファイルをダウンロードしている国土地理院地図は表示される。 また、GBP軌跡(折れ線)も描画される。バス時刻表も表示されない。

電池残量も急速に減っている。Android OSの更新が起きたのかも知れない。

Android エミュレータ LDPlayer(Android 9)や Android タブレットでは問題がない。

スマホとタブレットは Android 12であり、Google Playシステムアップデートの日付は同じであるが、 カーネルバージョンはスマホが 4.19.157-perf+ Jul 5 2023、タブレットが 4.19.191 sep 16 2023 である。

スマホの OS は最近更新されたわけではないので、OS の影響ではなさそう。


【原因判明】

java.io.FileNotFoundException: /storage/2EBA-4DDF/Map/japan_norm7/113/50.dat: open failed: EACCES (Permission denied)

いつの間にか、MapXのファイルアクセス権限が変わっていた。読み込みはできるが、書き込みができなくなっていた。 ファイルマネージャー+についても同じであった。このようなことは時々ある。

ダイアログまたはトーストを出すべきであろう。

2023.7.18 GPSログ

ディープスリープ対応の確認を行った。描画が正常に行われた。メモリ使用量は下がっていないようだ。 ちょっと外出したが GPS軌跡が描画されない。「3秒間隔に変更」というログ記録はある。 ディープスリープ対応の修正でバグが入り込んだようだ。あるいは、GPS取得の反応が遅いのであろうか?

きちんと反応するときと、何らかの事情で間隔変更命令が無視されるときがあるのではなかろうか? 何らかの対策を考えたい。

2023.7.16 zoom変更時などで一部のタイルが描画されない

スクロールすると解決する。Androidエミュレータではこの現象は起きない。

描画されなかったことを検出できれば、直ちに描画リクエストが発行されるはず。 タイルの状態管理に問題があるのか。

特にメモリの使用が大きい時に起こる。なぜ、GCを行わないのか? メモリに余裕があるためであろうか?しかし、動作が重くなっている。 このため、描画されないケースが生まれる。

描画したつもりが描画されていないのか?描画時のログを取ってみた。

17:20:30に MainActivity は破棄された。Service は動いており、18:45:37 にログが出力されている。

18:51:44に MapXを開いた。LocationUpdateService starts.は MainActivity#onCreate で出力している。 既に Service は動いているが、二重起動にはならないので、問題はない。

長時間スリーブしていたため、3タイルを除いて、タイルキャッシュは廃棄されていたようだ。 3タイルの描画を7回も繰り返している。レンダリングスレッド数を6にしていることが関係しているかも知れない。 本来ならば、新たなタイルの準備ができた段階で再描画を行うべきである。 無駄があるが、エラーではない。

その後、4、5、6、… とタイルが増えるごとに描画を行っている。 最終的に 12タイルになったときも4回繰り返している。

しかし、この段階では描画は不完全であったようで、 18:53:17にスクロールにより描画を実行しているようである。

要するに、ディープスリープの後の描画にはまだ問題が残っている。 タイルキャッシュの状態管理を見直す必要がある。

ディープスリープでは全てのデータが破棄されているとみなした方が簡単かもしれない。 ディープスリープとスリープの区別をどうするか? またはデータの破棄があったかどうかを判定できればよい。

2023-07-16 17:19:16 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/19/465312/206697.jpg
2023-07-16 17:19:16 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/19/465312/206698.jpg

2023-07-16 17:20:30 MainActivity.onDestroy
2023-07-16 18:45:37 lon 139.5045036, lat 35.5453023
2023-07-16 18:51:44 LocationUpdateService starts.

2023-07-16 18:51:53 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51673.jpg
2023-07-16 18:51:53 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51674.jpg
2023-07-16 18:51:53 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51675.jpg

2023-07-16 18:51:53 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51673.jpg
2023-07-16 18:51:53 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51674.jpg
2023-07-16 18:51:53 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51675.jpg

2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51675.jpg

2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51675.jpg

2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51675.jpg

2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51675.jpg

2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51675.jpg

2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51675.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51676.jpg

2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51675.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51676.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51676.jpg

2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51675.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51676.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51676.jpg

2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51675.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51676.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51675.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51676.jpg

2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51675.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51676.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51675.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51676.jpg

2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51675.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51676.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51675.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51676.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51676.jpg

2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51675.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51676.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51675.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51676.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51676.jpg

2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51675.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51676.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51675.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51676.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51676.jpg

2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51675.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51676.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51675.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51676.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51676.jpg

2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51675.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51676.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51675.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51676.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51675.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51676.jpg

2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51675.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51676.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51675.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51676.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51675.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51676.jpg

2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51675.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51676.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51675.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51676.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51675.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51676.jpg

2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51675.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51676.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51675.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51676.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51673.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51674.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51675.jpg
2023-07-16 18:51:58 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51676.jpg

2023-07-16 18:53:17 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51673.jpg
2023-07-16 18:53:17 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51674.jpg
2023-07-16 18:53:17 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51675.jpg
2023-07-16 18:53:17 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116326/51676.jpg
2023-07-16 18:53:17 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51673.jpg
2023-07-16 18:53:17 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51674.jpg
2023-07-16 18:53:17 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51675.jpg
2023-07-16 18:53:17 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116327/51676.jpg
2023-07-16 18:53:17 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51673.jpg
2023-07-16 18:53:17 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51674.jpg
2023-07-16 18:53:17 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51675.jpg
2023-07-16 18:53:17 drawBitmap /storage/2EBA-4DDF/Map/tiles/japan/17/116328/51676.jpg

2023.7.14 位置情報取得の初期化

1時間ほどたってからようやく位置情報取得が始まった。

おそらく起動時は自宅として、位置情報取得間隔を1時間にしている。 StepCounterによる移動検出で、位置情報取得間隔を3秒に変更するが、 このあたりのプログラムに不備があるのであろう。スムースにGPS追跡が始まらないことがあるようだ。

初期値は自宅外とした方がいいようだ。もし、自宅であれば、すぐに取得間隔は1時間に変わる。

2023.7.10 位置情報が取得できない

朝のゴミ出し等の移動記録はとれたが、その後の外出で移動記録が取れなくなった。

実機デバッグしてみたが、異常は見つからない。syslogにも異常はない。

今、思えば地図アプリを強制終了して、再起動してみればよかった。次にはそうしてみよう。

おそらく、Android がバッテリ使用量を抑えるために、一部のデータを破棄したのであろう。 データの nullチェックを充実させれば、対応できるであろう。

2023.7.7 位置情報取得テスト

Wi-FiのON/OFFで帰宅/外出を検出できるかと思ったが、少なくとも今のところうまくいっていないので、 StepCounterで移動を検出して、頻度、精度を変更する方式とした。

下記は削除した。

   } else if (intent.getAction().equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
      int state = intent.getIntExtra(     // 変化後の状態を取得
      WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN);
      if (state == WifiManager.WIFI_STATE_ENABLED) {
         Utils.writeLog("WiFi ON");
         fWiFi = true;
         interval = 3600 * 1000;     // 1時間毎
         requestLocationUpdates(interval, false);   // 自宅
     } else if (state == WifiManager.WIFI_STATE_DISABLED) {
         Utils.writeLog("WiFi OFF");
         fWiFi = false;
         interval = 3 * 1000;
         requestLocationUpdates(interval, true);    // 外出
     }

リファレンス

[1] Android Service
[2] Android Service コンポーネントの基本的な使い方