Activity – Service間の値受け渡しはIntentを通して行うのが通常ですが、staticなフィールドを利用して渡したい場合も有るかと思います.
そのような場合の注意点を記載します.
Activity で立ち上げたプロセス内で、staticなフィールドに値を設定しても値が受け渡すには、AndroidManifest.xmlのServiceの定義でandroid:process の記述をせず、デフォルトにする必要があります.
具体的には、<service>タグや<receiver>タグの中からandroid:processの記載を消すことになります.
1 2 3 4 5 6 7 |
<receiver android:name=".SampleService" /> <service android:name=".SampleService" /> |
processに設定できる値は以下の3パターンがあります
- android:process の記述無し
サービスはアプリケーションに割り当てられたプロセス上で、他のActivityと共に実行される。
1 |
<service android:name=".AttendantService"/> |
- android:process = “:testservice” とコロン”:”で始まる名前を指定した場合
サービスはアプリケーションのプロセスとは別の、新たなプライベートなプロセス上で実行される
1 |
<service android:name=".SampleService" android:process=":testservice"> |
- android:process = “servicename” と英小文字もしくはピリオドで始まる名前を指定した場合
サービスはアプリケーションのプロセスとは別の、新たなグローバルなプロセス上で実行される
1 |
<service android:name=".AttendantService" android:process=".service"> |
別プロセスで実行するようにした場合はアプリケーションのプロセスを終了してもサービスのプロセスが常駐して実行されます.