Membuat layanan latar belakang

Class IntentService menyediakan struktur yang sederhana untuk menjalankan operasi pada satu thread latar belakang. Class ini memungkinkan thread menangani operasi yang berjalan lama tanpa memengaruhi responsivitas antarmuka pengguna Anda. Selain itu, IntentService tidak terpengaruh oleh sebagian besar peristiwa siklus proses antarmuka pengguna, sehingga akan terus berjalan dalam situasi yang akan 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 operasi berjalan pada IntentService, dan Anda mengiriminya permintaan lain, permintaan tersebut akan menunggu sampai operasi pertama selesai.
  • Operasi yang berjalan pada IntentService tidak dapat diganggu.

Namun, dalam banyak 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, tentukan 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
            ...
        }
    }
    

Perlu diketahui bahwa callback lain dari komponen Service reguler, seperti onStartCommand() secara otomatis dipanggil oleh IntentService. Dalam IntentService, sebaiknya jangan mengganti callback ini.

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

Menentukan layanan intent dalam manifes

IntentService juga memerlukan entri dalam manifes aplikasi Anda. Berikan entri ini sebagai elemen <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 elemen <service> tidak berisi filter intent. Activity yang mengirimkan permintaan kerja ke layanan menggunakan Intent eksplisit, sehingga tidak perlu filter. Hal ini juga berarti bahwa hanya komponen dalam aplikasi yang sama atau aplikasi lain dengan ID pengguna yang sama dapat mengakses layanan tersebut.

Setelah memiliki class IntentService dasar, Anda dapat mengirimkan permintaan kerja ke class tersebut dengan objek Intent. Prosedur untuk membuat objek-objek ini dan mengirimkannya ke IntentService dijelaskan pada Mengirim permintaan kerja ke layanan latar belakang.