停止しないサービスを作りたい

485 views
Skip to first unread message

masa

unread,
Jan 7, 2011, 4:12:44 AM1/7/11
to 日本Androidの会
お世話になっております。
現在、勉強がてらに以下のテストアプリを作成しています。


■サービス
画面のON・OFF・バッテリ等の各インテントを受け、
その種別と時刻をメンバ変数にキャッシュしていきます。
(List<String>に文字列を追加していくだけです)


■Activity
サービスとAIDLでバインドし、イベント一覧を取得、リストに表示します。
(AIDLは勉強のためにあえて使っています)
OnCreateでサービスにbindServiceし、OnDestroyでunbindServiceしています。


挙動としては、Activityの表示中から[back]等でホームに戻ると、
OnDestroyが走りサービスが停止してしまうようです。(当然?)



Activityが存在しなくても、サービスは動き続けて欲しいという場合、
同じアプリではなく別アプリにすべきなのでしょうか?
今回の場合、unbindServiceをしないという行為は許されるものなのでしょうか?



理想としては、
・マシン起動時にサービスだけ起動
・Activityの表示でその時に保持しているデータをやりとり
・Activityがキルされてもサービスは残り続ける
このような挙動なのですが、何か根本的に勘違いしている事があるのでしょうか?


宜しくお願い致します。

yanagi

unread,
Jan 7, 2011, 4:58:39 AM1/7/11
to android-g...@googlegroups.com
masaさん

こんばんは、高柳と申します。

onDestroy()でunbindせずに、Buttonか何かを用意し、
そのButtonクリックイベントなどでunbindするという挙動にしてはいかがでしょうか。

--
高柳 翔
mail: sobac...@gmail.com
Twitter: sobachanko

2011年1月7日18:12 masa <ozma...@gmail.com>:

--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。




Shigeru SUZUKA

unread,
Jan 7, 2011, 6:00:48 AM1/7/11
to android-g...@googlegroups.com
masa さん

鈴鹿と申します。

Activityが終了したあとも、サービスが動き続けるようにするためには、Context#startService を使用します。
サービスを停止するには、Context#stopService を使用します。

Activityからサービスを利用する場合は bindService を使用するのは同じです。

> ・マシン起動時にサービスだけ起動
OS起動時に呼ばれるBroadcast Intent(ACTION_BOOT_COMPLETED)があります。
このタイミングでサービスを起動してやれば、Activityがなくてもサービスを起動することができます。


以上、簡単ですが、参考になれば幸いです。


2011年1月7日18:12 masa <ozma...@gmail.com>:

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>
>

--
Shigeru SUZUKA

よし

unread,
Jan 7, 2011, 9:50:42 AM1/7/11
to android-g...@googlegroups.com
masaさん

こんばんは、藤崎と申します。


BroadcastReceiver を継承したクラスで静的インテント(Manifestに記述)で
以下のIntentを取得したときにサービスが落ちていればstartServiceで立ち上げるようにすると
KILLされても比較的すぐに復活できるんではないかと思います。
 ACTION_BOOT_COMPLETED
 ACTION_CLOSE_SYSTEM_DIALOGS

また、Manifestに 以下の要領でプロセス名を実際のパッケージ名でない名前に変更するように記述
することで、タスクキラーアプリなどに消される可能性を低くすることが出来ます。
<application android:icon="@drawable/icon"
android:label="@string/app_name"
android:process="com.android.myservice">

なお、ActivityをKillされてもサービスだけ残すことは出来ない認識です。

一度お試しください。

2011年1月7日18:12 masa <ozma...@gmail.com>:

masa os

unread,
Jan 14, 2011, 4:24:17 AM1/14/11
to android-g...@googlegroups.com
まさです。

回答が遅れましたが、アドバイス頂いた皆様ありがとうございました。


2011年1月7日23:50 よし <uta...@gmail.com>:
Reply all
Reply to author
Forward
0 new messages