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
IntentServicetidak 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:
- Membuat subclass
IntentServiceAnda sendiri. - Membuat metode callback
onHandleIntent()yang diperlukan. - Menentukan
IntentServicedalam file manifes.
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.