2013年4月12日金曜日

Androidサービス定義

AndroidManifest.xmlには、サービスを定義する必要があります。

<service
android:name=".CalculatorService"
android:process=":calculator" >
<intent-filter> <action android:name="com.example.android.service.ICalculatorService" /> </intent-filter>
</service>
 このサービスには「android:process」という属性が定義されています。これを定義することで、サービスを独立したプロセスで実行させることが可能になります。

 android:processに指定する値がコロンで始まる場合、独立したプライベートプロセスになり、アルファベットの小文字で始まる場合はグローバルプロセスになるという規則があります。

 サンプルアプリは、この属性が付いている状態であればbinder経由のプロセス間通信になり、付いていない状態であればローカルサービスの呼び出しになります。

 なお、AndroidManifest.xmlには「Exported service does not requre permission」という警告が出ています。

 これはインテントフィルタを定義したサービスは、ほかのアプリから呼び出すことが可能だけど、パーミッションが定義されていないため、どんなアプリからも呼び出せてしまうけど、それでよいのか、ということを警告しています。

 この警告をなくすにはandroid:permission属性を追加し、呼び出し元もそのパーミッションを宣言する必要があります。ローカルサービスではインテントフィルタが必要ありません。そのため、ほかから呼び出される心配もないので、やはりローカルサービスは簡単です。

0 件のコメント:

コメントを投稿