サービス(Service)が起動しない時の対処法

Androidでバックグラウンドで色々な処理を実行するのにServiceクラスを利用しますが、Serviceクラスを正しく定義してstartServiceメソッドで起動しない場合があります。

その原因はマニフェストファイルにあることが多いです。

例えばMyServiceというサービスクラスを記述して次のようにマニフェストファイルに定義するとします。

AndroidManifest.xmlの一部
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        
        <!-- サービスの記述 -->
        <service android:name=".MyService" />
        
    </application>

この状態でstartServiceを呼び出してもサービスは起動しません。

更に悪いことにこう書いたとしてもエラーメッセージが出ることはありません。

そこで次のようにパッケージ名を含めて定義する必要がります。

AndroidManifest.xmlの一部
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        
        <!-- 次のように書き換え -->
        <service android:name="com.xxx.myapp.MyService" />
        
    </application>

これでサービスを正しく起動できるようになります。

Activityの場合はパッケージ名は省略しても問題ないみたいですが、ServiceBroadcastReceiverなどの場合はパッケージ名を含めてフルで定義した方が良さそうです。

関連項目