Androidのアプリは、画面を占有している間は確かに生きていますが、ひとたび、裏側に回ったり、電源管理で電源を落とされたりしたときには、場合によって、止められたり、消されたりしてしまいます。
まあ、ストップウォッチなんだから、時間を測っている間は、電源も切られなければ、アプリのスイッチもさせないくらいの勢いで臨めば良いのかもしれませんが、電話がかかってきたり、電池がやばくなったりして、ちょっと休止させたり、ツイッターが気になって、ちょっとのぞきに行ったりしたくなるかも、じゃないですか?
というわけで、消えた場合の処理を考えないといけないのです。もう、ほとんどの処理は、画面の回転の時に実装した Bundleがやってくれているのですが、一時的な休止(onPause – onResume)ではなくて、本格的に止められた場合(onStop – onRestart)に、バックグラウンドで動かしていた、TimerServiceが止まったままになってしまい、内部的には時間計測は続いているものの、画面が更新されなくなってしまうというお間抜けな状態に。泣けてきます。
まあ、onRestart()で再起動されてくるケースでは、多分、TimerServiceは、確実に死んでいると思われるので、とりあえず、時間計測中であればTimerServiceの再起動をかけるようにしてみました。それにしても、Androidアプリのライフサイクルは面白い、興味深い。
コメント