Membuat layanan latar belakang

Class IntentService menyediakan struktur yang mudah untuk menjalankan operasi pada satu thread latar belakang. Hal ini memungkinkannya menangani operasi yang berjalan lama tanpa mempengaruhi responsivitas antarmuka pengguna Anda. Selain itu, IntentService tidak terpengaruh oleh sebagian besar peristiwa siklus proses antarmuka pengguna, sehingga terus berjalan dalam situasi yang dapat menonaktifkan AsyncTask

IntentService memiliki beberapa batasan:

  • Tidak dapat berinteraksi langsung dengan antarmuka pengguna. Untuk menempatkan hasilnya di UI, Anda harus mengirimkannya ke Activity.
  • Permintaan pekerjaan berjalan secara berurutan. Jika suatu operasi berjalan di IntentService, dan Anda mengirimkan permintaan lain, permintaan tersebut akan menunggu hingga operasi pertama selesai.
  • Operasi yang berjalan pada IntentService tidak dapat dihentikan.

Namun, dalam sebagian besar kasus, IntentService adalah cara yang direkomendasikan untuk menjalankan operasi latar belakang sederhana.

Panduan ini menunjukkan cara melakukan hal-hal berikut:

Menangani intent yang masuk

Untuk membuat komponen IntentService untuk aplikasi Anda, tentukan class yang memperluas IntentService, dan di dalamnya, menentukan metode yang menggantikan onHandleIntent(). Contoh:

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
        ...
    }
}

Perhatikan bahwa callback lain dari komponen Service reguler, seperti onStartCommand() otomatis dipanggil oleh IntentService. Dalam IntentService, Anda harus menghindari mengganti callback ini.

Untuk mempelajari lebih lanjut cara membuat IntentService, lihat Memperluas ECPC.

Menentukan layanan intent dalam manifes

IntentService juga memerlukan entri dalam manifes aplikasi Anda. Berikan entri ini sebagai <service> yang merupakan turunan dari Elemen <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>

Atribut android:name menentukan nama class IntentService.

Perhatikan bahwa <service> elemen ini tidak berisi filter intent. Tujuan Activity yang mengirimkan permintaan pekerjaan ke layanan menggunakan Intent eksplisit, sehingga filter tidak diperlukan. Hal ini juga berarti bahwa hanya komponen dalam aplikasi yang sama atau aplikasi lain dengan ID pengguna yang sama dapat mengakses layanan.

Setelah memiliki class IntentService dasar, Anda dapat mengirim permintaan pekerjaan dengan objek Intent. Prosedur untuk membangun objek-objek ini dan mengirimkannya ke IntentService dijelaskan dalam Mengirim permintaan pekerjaan ke layanan latar belakang.