アクティビティの終了時にServiceのonCreateとonStartCommandが呼ばれる

400 views
Skip to first unread message

talby

unread,
Jan 16, 2015, 11:01:06 AM1/16/15
to android-g...@googlegroups.com
始めまして

Serviceの動作(ライフサイクル)について質問です。
環境はAndroid5.0.1 AndroidStudio1.0.2で開発しています。
メインのアクティビティのボタンのクリックで以下の関数を読んでいます。
startService(new Intent(MainActivity.this, MyService.class));
MyServiceはServiceを継承した自作したクラスです。
これが実行された時点で、MYServiceのonCreateとonStartCommandが実行されます。
これらの処理の中でトーストでそれぞれ"onCreate"と"onStartCommand"表示しています。
この点は何も問題ないと認識しています。
次に上記startServiceを実行した後に、Androidの四角ボタン(起動中のアプリ一覧が出るボタン)を押して、
アプリの右上のバツを押して当メインアクティビティを終了します。
するとここでもう一度onCreateとonStartCommandが実行されます。
同様にトーストの表示で確認できています。

具体的に何に困っているかというと、MyServiceのstaticの変数にMainActivityから値を入れているのですが、
1回目の呼び出し時には入れた値が入っているのですが、2回目の呼び出し後は初期値になっています。
MainActivityから入れた値をアクティビティ終了後も保持したいと思っています。
ご存知の方がいらっしゃいましたらご教示いただけますでしょうか。

長尾芳人

unread,
Jan 19, 2015, 9:20:46 AM1/19/15
to android-g...@googlegroups.com
はじめまして。
長尾と申します。

投稿から時間がたっていますので解決されているかもしれませんが・・・
私もServiceはそこまでは詳しくは無いので間違っているかもしれませんが私が認識している情報を書き込みます。

Serviceに関してですが、AndroidのServiceは起動後にシステムによって強制終了をされてしまう仕様の様です。
(強制終了の際はonDestroyが呼ばれずにonCreate→onStartCommandと実行されます。)
ですが、onStartCommandの戻値で強制終了後の挙動を指定する事が可能になっています。
talbyさんの様にServiceで数値を保存したい場合には
return START_REDELIVER_INTENT を使用するのが良いのでは?思います。

その他の挙動は課kのサイトにいろいろと掲載されていますのでご参考にでも・・・


2015年1月17日土曜日 1時01分06秒 UTC+9 talby:

talby

unread,
Jan 20, 2015, 9:58:39 AM1/20/15
to android-g...@googlegroups.com
長尾様

ご回答ありがとうございます。
一応この件についてはアクティビティ内でPreferencesで値を保存し、
Service内で値を呼び出す方法で、若干強引ですが整合性を取れるようにいたしました。

>>(強制終了の際はonDestroyが呼ばれずにonCreate→onStartCommandと実行されます。)
この点私も気がつき、onStartCommandの戻り値をいじったのですがうまくいきませんでした。(投稿時)
return START_STICKYですとintentはnullになりますが再起動はしてくれるので上記方法をとりました。

ご指摘を受けて再度試してみたところreturn START_REDELIVER_INTENTでも再起動を確認できました。
この戻り値だと再起動まで15秒以上かかるので投稿時には再起動に失敗すると勘違いしておりました。
START_STICKYの場合は2〜3秒以内には再起動します。

START_REDELIVER_INTENTで値が保存されるのであれば余計な処理が減って良いかもしれません。
参考URLもありがとうございます。もう少し勉強してみます。

2015年1月19日月曜日 23時20分46秒 UTC+9 長尾芳人:
Reply all
Reply to author
Forward
0 new messages