開発中のアプリで、「バックグラウンドで定期的にサーバにPOSTする」という機能を付ける必要があります。
それで、Service内でTimerを動かし、そのTimer内でPOSTする、普通のコードを書きました。
すると、スリープ中にPOSTが実行されないという現象が起こりました。それだとだめなんだよ、、
原因を分析してみました。
電源を接続していると
電源を接続している場合、スリープでもきちんとPOSTできていることが確認できました。てことは、バッテリー動作での省電力機能が働いているからなんでしょうね。
省電力機能でどこの段階で殺されているのか、確かめます。
無線デバッグを使う
電源に接続しない状態でLogCatを拾うために、無線でバッグを行います。
このページを参考にしました。
その結果、バッテリ駆動のスリープ中にはTimerがストップしてしまうことがわかりました。
どうやって解決しよう
プッシュ通知を利用してPOSTを送る指令を伝えます。
その工程については、また次回、、(まだ実装できてない)
追記 2015/03/23
LTEでの通信の際は、ちゃんとPOSTされるようです。
Wifiでの運用だと、一部そういうことが起こるということで、、、