トップ地図アプリMap > 地図アプリMap開発記録
2023年4月
前記録

地図アプリMap開発記録

2023.5.26 歩数計表示がおかしい(StepCounter)

logを見ると25日の記録がない。24日の午後3時半以降の更新がない。 多分、24日にリブートがあり、その処理に問題があったのであろう。

59920,2023-05-23T07:18:34
60987,2023-05-23T13:01:58
62708,2023-05-23T14:07:35
63862,2023-05-23T18:00:35
63862,2023-05-24T05:38:14
65028,2023-05-24T08:40:48
67628,2023-05-24T09:04:48
68637,2023-05-24T12:03:58
70653,2023-05-24T12:33:03
71858,2023-05-24T12:48:44
73427,2023-05-24T13:15:37
74680,2023-05-24T13:32:18
76038,2023-05-24T14:33:16
77478,2023-05-24T15:30:33
77478,2023-05-25T08:14:23
77478,2023-05-26T06:14:04

手作業で 7370,2023-05-26T06:14:04 とする。

2023.5.20 amenity=bbqのアイコンが間違っている

barrier=lift_gate に間違えているようだ。PC版では正常である。

アプリMapを強制終了して、再起動すると直った。再発するようならば原因を探る。

2023.5.20 map.invalide()に排他制御を追加

レンダリングはマルチスレッドで行っている。レンダリング完了時の map.invalidate() はこれまで排他制御していなかった。 ぶつかった場合、一方だけが無視されるならば問題ないが、全滅するのかも知れない。 それならば、時々、描画が漏れ、スクロールで描画されるのに納得がいく。

sychronized で囲んだ。これで解決かどうかは数日使ってみないと判断できない。

  synchronized (map.objLock) {    // 2023.5.20
      map.invalidate();
 }

2023.5.14 microSDカード交換

数日前、SDカードをフォーマットせよという警告が出た。どうやら、microSDカードの異常があるようだ。 確か、現在のカードは以前、タブレットに使っていたものを流用したもののはずである。 スマホで1年半、OSMデータの更新も多いので、壊れても不思議はない。

さほど大容量はいらないので、64GBのmicroSDカードを購入した。5年ほど前は4、5千円したが、 今や千円以下となった。

64GBの場合、exFATのデフォルトのアロケーションユニットサイズは 128KB であるが、 平均的には小さいファイルを大量に書き込む関係から、今回はアロケーションユニットサイズは 32KBとした。

時々、ボタンやメニューが効かなくなったり、完全に、Mapアプリがフリーズする原因は SDカードの不調が関係していたかも知れない。しばらく様子を見たい。

これまで、負荷が高いほど、エラーが起きやすかったのは、I/O回数が多いためかも知れない。

SDカードを交換すると、ディレクトリ名が変わる。 現在は多くのプログラムで、このアドレスを設定しているため、修正箇所が多い。 いずれ、1か所にまとめるべきであろう。

2023.5.7 バッテリー使用量(3)

現在は自宅で動きが少ないときは GPSによる位置情報取得は1時間ごとにした。

昨夜充電して、今日は雨なので、外出していないし、スマホは殆ど使っていない。 11時間たち、バッテリー使用量は5%、あと6日となっている。

この様子では、外出したり、適度に使った場合、平均的には、充電はこれまで通り、3日に1回くらいになるだろう。

外出時はGPSを1秒間隔としているが、いずれ、動きが少ない時は、10秒~数分間隔に広げたい。 散歩では2秒間隔でもいいかもしれない。

1日9時間たち、残り81%、あと5日となった。この間、GPSやStepCounterの負荷は低い。

その後、2時間弱散歩して、1日14時間たち、残り71%、あと4日となった。

GPSはバスや電車では1秒間隔でいいが、歩いているときは2~3秒間隔で十分であり、 自宅外でも静止状態のときは、1~5分間隔でもいいであろう。 移動中かどうかはGPS、歩数計だけでなく、いずれ加速度計も使う方がいいだろう。

取り敢えず、平均移動速度1m/s以上の時 1秒間隔、そうでなければ 3秒間隔とする。

2023.5.6 バッテリー使用量(2)

1日21時間で、Map 24%、 画面 24%、モバイルネットワーク 13%、GooglePlay開発者サービス 12%、Chrome 7%、アイドル 7%、Google 4%、スギサポwalk 8%、Google Playストア 3%、…、合計 91%である。

5,6千歩散歩した。スギサポwalkの使用量が増えた。この間、デバッグしていないが、GooglePlay開発者サービスの使用量が多い。


GooglePlay開発者サービスの使用量はMapのデバッグデータに比例すると思っていたのは誤解であった。

2023.5.6 バッテリー使用量(1)

1日10時間で、Map 15%、 画面 13%、モバイルネットワーク 9%、GooglePlay開発者サービス 5%、Chrome 6%、アイドル 5%、Google 3%、スギサポwalk 2%、Google Playストア 2%、…、合計 57%である。 Mapのバッテリー使用量をもう少し減らしたい。

GPSは外出時は1秒間隔、自宅では1時間間隔としている。30秒間隔で歩数監視をしているのが無駄であろう。 StepCounterの変化を検出したときに、30秒間に20歩以上かどうかを判断するように変更する。

[変更前]
  // StepCounterの値を監視する
  final Handler handler = new Handler();
  final Runnable rn = new Runnable() {
      @Override
      public void run() {
          if (stepCount - lastStepCount >= 20 && atHome) {
              Utils.writeLog("移動あり、1秒間隔に変更する");
              requestLocationUpdates(1000, true);
          }
          lastStepCount = stepCount;
          if (atHome && cntGPS >= 5) {
              Utils.writeLog("在宅により60分間隔に変更する");
              requestLocationUpdates(60*60*1000, true);
          }
          cntGPS = 0;
          handler.postDelayed(this, 30*1000);
      }
  };
  handler.post(rn);

2023.5.1 万歩計 lastlog.csvが更新されない

lastStepCount(lastlog.csvに書き込んでいる数値)の初期値が問題ではなかろうか。

onCreateで lastStepCount = readInt("lastlog");

イベント受け取りで 1000歩ごとにログを取るようにしているが、履歴も取れていないし、 lastlog.csv への書き込みもない。

スマホの再起動が起きると、再起動前の lastStepCount に比べて、count はゼロから始まる。 つまり、再起動が起きたときは lastlog にゼロを書きこむ必要がある。

   if (count - lastStepCount >= 1000) {     // 1000
      String log = count + "," + now;
      writeStepCounterLog(count, now);    // append mode
      writeLine("lastlog", log, false);
      lastStepCount = count;
  }