Pemahaman Intent Service Pada Android Dan Kapan Menggunakan Nya
IntentService dan Service keduanya sama-sama merupakan sevice (baca: background service). Ya, karena IntentService merupakan extend dari Service. So, secara umum fungsinya mirip, cuma intentService tentunya lebih spesifik. Saya suka memahami sesuatu dengan membuat poin-point, karena lebih mudah diingat. Nah, berikut ini penjelasan tentang IntentService.
- Digunakan untuk menjalankan proses asinkron (background task)
- Cara yang tepat untuk menjalankan long-running background operationtanpa mempengaruhi responsifitas User Interface (UI), dan tidak terpengaruh UI lifecyle event.
- Berjalan secara terpisah dari Main Thread aplikasi. Jadi, IntentService berjalan di spawned worker thread yang ditelurkan oleh MainThread app.
Jadi, ketika aplikasi kita dijalankan, ia memiliki MainThread yang mana thread aplikasi berjalan di atasnya. Nah, IntentService ini ada di Thread yang baru (anak dari MainThread)
- Request akan di-antrikan dan diproses satu per satu.
Jadi jika task pertama belum selesai, kemudian IntentService dijalankan dengan task yang baru, maka ia akan masuk antrian
- Akan berhenti secara otomatis jika semua job sudah selesai
- Operasi di IntentService tidak bisa diinterupsi
- Mudah mengirimkan parameter ketika menjalankan service dengan menggunakan Intent
- Ia di-trigger dengan method onHandleIntent()
Pada method onHandleIntent(Intent) dilakukan handling intent sebagai parameter service - Mehod onHandleIntent() berjalan di worker thread (background) sehingga ia tidak dapat berkomunikasi langsung dengan main thread (seperti UI thread).
- By default, IntentService didesain untuk menjalankan task yang tidak berhubungan dengan UI. Sehingga basically, dia tidak berkomunikasi langsung dengan komponen UI seperti Activity atau Fragment. Tapi jika dibutuhkan bisa menggunakan LocalBroadcastManager dan BroadcastReceiver.
- Method LocalBroadCastManager.sendBroadcast() di sisi service untuk membroadcast Intent yang berisi pesan ke Activity/Fragment.
- Method LocalBroadcastManager.regigisterReceiver()danLocalBroadcastManager.unregisterReceiver() di sisi Activity/Fragment digunakan untuk mendaftarkan Activity/Fragment tersebut agar menerima pesan dari service.
Kapan Menggunakan Service dan Kapan Menggunakan IntentService?
- Service biasanya digunakan untuk menjalankan task tanpa UI, tetapi tidak terlalu lama. Jika task kemungkinan berjalan lama, kita perlu membuat thread di dalam service tersebut.
- IntentService bisa digunakan untuk task yang lama dengan tanpa komunikasi dengan Main Thread. Jika perlu komunikasi dengan Main Thread/UI, bisa melakukan broadcast intent dengan LocalBroadcastManager dan BroadcastReceiver.
IntentService juga cocok digunakan untuk menjalankan task yang sama secara berulang, tetapi dengan data yang berbeda misalnya. Karena ketika IntentService dijalankan, ia akan membuat thread baru, dan thread tersebut akan tetap ada selama ada request yang mengantri.
Next discussion: ThreadPoolExecutor (https://developer.android.com/training/multiple-threads/create-threadpool.html
-> Mengambil task yang ada di antrian, dan menjalankannya di Thread pool ketika kosong (free).
-> Thread pool bisa menjalankakn multiple task secara paralel. Ketika bicara multiple thread, programmer harus ingat dan aware terhadap yang namanya masalah “thread-safe”. Kunci variabel/objek yang bisa diakses oleh lebih dari satu thread dengan synchronized block. Cara ini mencegah suatu thread membaca suatu objek yang sedang dimodifikasi oleh thread lain.
Kapan Di Trigger?
- Service ditriger ketika method startService() dipanggil
- IntentService ditrigger dengan menggunakan Intent. Dia melakukan spawning(menelurkan) worker thread baru, dan method onHandleIntent() dipanggil.
Ditrigger dari Mana?
- Service dan IntentService bisa ditriger dari thread, atau app component (activity, fragment, service, dll).
Dijalankan di mana?
- Meski Service berjalan di background (bukan UI Thread), tetapi ia masih berada bersama UI Thread dan thread-thread yang lain yang berada di Main Thread dari aplikasi.
- IntentService berjalan di worker thread yang terpisah dari Main Thread aplikasi. So, misal kita ingin membuat service yang robust ketika menjalankan task-nya, di mana kemungkinan app kita crash tetapi tidak mempengaruhi task tadi, maka IntentService pilihan yang tepat.
Kekurangan
- Service: mungkin bisa mem-bloack Main Thread aplikasi.
- IntenService: tidak bisa menjalankan task secara paralel, tapi multiple task akan queue (antri) di thread yang sama.
Kapan dihentikan?
- Service: Programmer harus tau kapan task akan selesai untuk kemudian memanggil stopSelf() atau stopService(). Why? Karena service akan tetap berjalan meski task sudah selesai, selama belum di-stop oleh kode program kita, atau di-stop oleh sistem android.
- IntentService: akan secara otomatis berhenti ketika semua task sudah selesai.
Untuk mempercepat pemahaman ini, daftar segera kursus komputer di Edusoft Center. Ada puluhan paket kursus dengan trainer yg handal dan berpengalaman.
Info selengkapnya bisa hubungi
No Simpati : 082 22922 2121 (WA )
atau
Bisa Langsung Registrasi Online lewat Formulir Online:
www.edusoftcenter.com