日記#309#310
#309 6月4日
今日はセンサー値取得用のアラームと日付と歩数カウントをファイルを記録するアラームの2つのアラームをセットした状態で定刻更新が機能するか試してみた。
その前に、昨日のうちに仕込んでおいた定刻更新があるのでその結果を先に示す。
結果は、動作はしたが歩数取得が上手くいっていなかった。
ただ、これでバックグラウンド処理(アプリを閉じても機能する方)は問題なく動作し続けられることが分かったのでかなりの前進だ。
本題に戻って2つのアラームセットは上手くいってそうだった。
2回目のStart_sのログの前後でgetWalkCount_○○の○○がnullから73852.0に変化している。
これは2回目のStart_s前にsensorValue_s○○でセンサー値を取得していてこれを上手く変数に格納できたからだ。
次は”アプリを閉じている状態で上手くいっているか”と”アプリを開いた状態でも上手くいっていくか”を検証することにした。
こっちは短めに検証したかったので、現在時刻から15分おきに確認することにした。
始めの15分は”アプリを閉じている状態で上手くいっているか”で改めて検証。
次の15分は”アプリを開いた状態でも上手くいっていくか”を検証することにした。
結果は
始めの15分:”アプリを閉じている状態で上手くいっているか”
→成功
次の15分は”アプリを開いた状態でも上手くいっていくか”
→成功
次はちゃんと歩数を増やしてセンサー値取得もちゃんとできているかを確かめてみる。
結果
成功
以上より、大方上手くいってほしいことは上手くいった。
あとは、重複してしまうアラームのセットを直すだけだ。
onSensorChangeが2回起動してしまった時に重複している様子があるので、そこをなんとかすればいいと思う。
この問題はブロードキャストレシーバーを使っていた時と同じような問題なのでまた返ってきた感じがある。
↑の問題はよくわからない。
今分かっていることは
現在時刻から+15分後(AlarmManager.INTERVAL_FIFTEEN_MINUTES)を使用すると、センサー値を2回取得しても綺麗に思い通りの挙動になり、現在時刻から+(セットしたアラームタイムから現在時刻を引いた値)後を使用するとセンサー値取得とファイル記録を2回行ってしまうということだ。
今考えた可能性としては毎回次のアラームを設定するその短い瞬間に現在時刻がアラームを満たされていない(超えてしまっている)状況が発生してしまうことにより、”アラームの時間まで繰り返してサービスの処理を行ってしまう”が乱入してしまっているのではないかと思う。
ここまでやって改めていつから定刻更新と戦っていたのかを確認してみた。
5/1あるいはそれより以前だそうだ。
1か月以上の停滞。
これまでの最大の遅延。
さすがに頭を抱えた。
可能性を潰していけたことも成果と言われるが、1ヶ月は正直許容できないし、したくない。
最大の敗北は今回の問題の解答になった仮説の検証から逃げ続けていたことだ。
次沼ったと感じた時には思いついた仮説から逃げないように気を付けなければならない。
それと人間の直感はやっぱり意外と当たる。
#310 6月5日
今日はセンサー値取得とファイル記録を2回行う問題を解決しようとしたが、分からなかった。
現在時刻から+15分後(AlarmManager.INTERVAL_FIFTEEN_MINUTES)ではちゃんとした挙動で、それ以外だと2回処理してしまう。
予想では次の時間を決める際に何かがあると思うのだが、そこが掴めな
い。
この記事が気に入ったらサポートをしてみませんか?