バックグラウンド サービスを作成する

IntentService クラスは、簡単な構造でスクリプトを実行できます。 1 つのバックグラウンドスレッドで 実行されるようにしますこれにより、長時間実行オペレーションを処理できます。 ユーザーインターフェースの応答性に影響を与えませんまた、 IntentService は、ユーザー インターフェースのライフサイクル イベントのほとんどの影響を受けないため、 AsyncTask がシャットダウンされる状況でも実行を継続

IntentService にはいくつかの制限があります。

  • ユーザー インターフェースと直接インタラクションすることはできません。結果を UI に表示するには、 Activity に送信する必要があります。
  • 作業リクエストは順次実行されます。オペレーションが IntentService で別のリクエストを送信した場合、リクエストは 最初のオペレーションが終了します。
  • IntentService で実行されているオペレーションは中断できません。

ただし、ほとんどの場合、実行には IntentService を使用することをおすすめします。 バックグラウンド処理が簡単になります。

このガイドでは、次の方法について説明します。

受信インテントを処理する

アプリの IntentService コンポーネントを作成するには、 IntentService を拡張し、その中に onHandleIntent() をオーバーライドします。次に例を示します。

Kotlin

class RSSPullService : IntentService(RSSPullService::class.simpleName)

    override fun onHandleIntent(workIntent: Intent) {
        // Gets data from the incoming Intent
        val dataString = workIntent.dataString
        ...
        // Do work here, based on the contents of dataString
        ...
    }
}

Java

public class RSSPullService extends IntentService {
    @Override
    protected void onHandleIntent(Intent workIntent) {
        // Gets data from the incoming Intent
        String dataString = workIntent.getDataString();
        ...
        // Do work here, based on the contents of dataString
        ...
    }
}

通常の Service コンポーネントのその他のコールバック( onStartCommand() は、サービスによって IntentServiceIntentService では、 オーバーライドできます

IntentService の作成の詳細については、 IntentService クラス

マニフェスト内でインテント サービスを定義する

IntentService は、アプリ マニフェストにもエントリが必要です。 このエントリを <service> その子要素の <application> 要素:

    <application
        android:icon="@drawable/icon"
        android:label="@string/app_name">
        ...
        <!--
            Because android:exported is set to "false",
            the service is only available to this app.
        -->
        <service
            android:name=".RSSPullService"
            android:exported="false"/>
        ...
    </application>

属性 android:name は、インスタンスのクラス名を指定します。 IntentService

なお、 <service> 要素に インテント フィルタ。「 サービスに処理リクエストを送信する Activity は、 明示的な Intent であるため、フィルタは必要ありません。また、 つまり、同じアプリ内のコンポーネントか、他のアプリケーションの サービスにアクセスできます。

基本的な IntentService クラスを作成したので、処理リクエストを送信できます。 Intent オブジェクトで追加します。これらのオブジェクトを作成する手順は、 IntentService に送信する方法については、 バックグラウンド サービスに処理リクエストを送信します