- ベストアンサー
Android-Service、アプリの再起動
mainのActivityがあり、そこからGPSを定期取得するServiceを作成しました。 ここに 1.一定時間が経過したら、Service自身の再起動を行う 2.一定時間が経過したら、アプリケーションの再起動を行う 上記のような動作を考えているのですが、どのように実装するのがベストでしょうか? 1.に関しては、Timerで一定時間経過後に、ServiceのStop,Startを行うと思うのですが、どこにどのような記述で処理を実装したらいいのか判りません。 2.は検索しましたが、それにあたるようなヒントを得られませんでした。 もしご存じでしたら、ご教授お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>1.一定時間が経過したら、Service自身の再起動を行う 実行しているActivity側のスレッドで、ActivityのunbindService(serviceConnection)、unregisterReceiver(broadcastReceiver)を呼び出してバインドを解消し、サービスのstopSelfを呼び出して終了を要求します。もし各種センサーなどのイベントリスナーもバインドしていたら、unregisterListenerも必要でしょう。これで終了した後、またサービスにバインドすればよいと思います。 >2.一定時間が経過したら、アプリケーションの再起動を行う これは、どうでしょうね。アプリケーションを終了して更に起動するというのは、ちょっとうまい方法が思いつきません。というより、自身を再起動しなければならないような仕様のアプリというのが想像つかないのですが……。そもそも、なぜサービスやアプリを再起動しなければならないのでしょう? 単に、できるかどうかやってみたい、ということですか?
その他の回答 (1)
>定期的にGPSを取得する処理が、曜日と時間によって実行をさせたい時と、させたくない時があります。 サービスでは、スレッドを回して定期的にGPSを取得しているのですよね? ならば、その際に日時などをチェックして、GPSを呼び出すかどうかを決めるなりすれば良いと思います。サービスそのものを再起動する必要はないと思いますよ。
お礼
ロジックを見直しましたら、教えて頂いたようにサービスの再起動が必要なくなりました。 ありがとうございました。
補足
解答ありがとうございます。 1.に関してはイメージしてましたが、詳細に書いていただけたおかげでよく判りました。 2.のケースは、このアプリは常に起動しっぱなしさせておきたいのですが、長時間動作させていると重くなってくることがあるのかと思いアプリ自体を再起動を考えました。 Activityやserviceの解放をちゃんとやっていれば、このようなこと自体、考えるべきではないのでしょうか。 サービスの再起動については、定期的にGPSを取得する処理が、曜日と時間によって実行をさせたい時と、させたくない時があります。そのため、例えば夜の12時にサービスを再起動せることで、その切替ができると考えました。 このような、スケジュールの操作の仕方は一般的ではないのでしょうか?