Class IntentService
menyediakan struktur yang sederhana untuk menjalankan
operasi pada satu thread latar belakang. Hal ini memungkinkan repositori dapat 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 keadaan 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 di
IntentService
, dan Anda mengiriminya 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:
- Membuat subclass
IntentService
Anda sendiri. - Membuat metode callback
onHandleIntent()
yang diperlukan. - Tentukan
IntentService
dalam file manifes Anda.
Menangani intent yang masuk
Untuk membuat komponen IntentService
bagi 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 ... } }
Perhatikan 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 ChromeVox.
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 pekerjaan ke layanan menggunakan
Intent
eksplisit, sehingga tidak diperlukan filter. Hal ini juga
berarti bahwa hanya komponen dalam aplikasi yang sama atau aplikasi lain dengan
ID pengguna yang sama yang dapat mengakses layanan tersebut.
Setelah memiliki class IntentService
dasar, Anda dapat mengirim permintaan pekerjaan ke class tersebut dengan objek Intent
. Prosedur untuk membuat objek ini dan mengirimkannya ke IntentService
dijelaskan dalam Mengirim permintaan pekerjaan ke layanan latar belakang.