KOMPONEN ANDROID (SERVICE)
Pengertian Service
Sebelumnya telah belajar mengenai
activity dan implementasinya. Activity adalah komponen yang memberikan
pengalaman kepada pengguna secara langsung. Pengguna dapat melihat dan
berinteraksi diatasnya.
Service berada pada sisi yang lain, komponen ini tidak memiliki antarmuka dan bahkan pengguna tidak akan akan tahu bagaimana dia bekerja. Pengalaman yang diberikan oleh service hanya berupa proses yang tidak terlihat. Ia digunakan untuk menjalankan beragam macam proses yang memakan waktu lama.
Walaupun berjalan secara background, pada dasarnya service dan komponen Android lainnya berjalan pada satu proses dan thread yang sama yaitu main thread atau ui thread. Bekerja di background bukan berarti ia bekerja secara asynchronous. Service tetap membutuhkan thread terpisah jika kita ingin melakukan proses yang membutuhkan komputasi intensif atau yang memakan waktu.
Contoh pemanfaatan service
- Aplikasi sosial media atau aplikasi yang
memiliki kemampuan untuk menerima push notification. Aplikasi
semacam ini pasti memiliki sebuah service yang berjalan dalam posisi stand
by untuk selalu menerima pesan yang masuk.
- Aplikasi chat juga
membutuhkan service untuk melakukan pengiriman dan menerima pesan yang
dikirimkan oleh pengguna.
- Aplikasi pemutar musik juga melakukan hal
yang sama. Untuk memberikan pengalaman yang lebih baik kepada pengguna,
aplikasi pemutar musik biasanya meletakkan proses streaming atau
memainkan musik di komponen service dengan tetap mempertahankan integrasi
dengan komponen lain, misalnya notifikasi. dll
2 BENTUK SERVICE
Started
Service berjenis ini adalah tipe
yang dijalankan oleh komponen lain, misal activity. Sekali dijalankan, service
ini akan berjalan selama belum dimatikan atau proses yang dijalankan selesai.
Sevice akan tetap berjalan walaupun komponen yang lain dimatikan oleh sistem
Android. Umumnya penggunaan service ini adalah untuk melakukan proses yang
tidak memberikan nilai balik ke komponen yang memanggilnya. Contohnya adalah,
mengunduh atau mengunggah berkas.
Bound
Service jenis ini merupakan tipe
service yang dijalankan oleh komponen lain, namun saling mengikat. Hubungan
yang terjadi antar kedua komponen tersebut seperti client-server.
Bisa saling menerima hasil dan menerima request yang ada. Pada service ini
dimungkinkan terjadi proses IPC (Interprocess Communication). Service
ini akan tetap berjalan di background selama masih ada komponen lain yang
mengikatnya. Jika tidak, maka Service akan dimatikan oleh sistem. Aplikasi
pemutar musik merupakan salah satu jenis aplikasi yang mengimplementasikan
service jenis ini.
Latihan Penerapan Service
1. Untuk melihat jalannya service, buatkan tampilan seperti dibawah.
Nama project :
MyService
Activity :
Empty Activity
2. Lengkapi
MainActivity.xml
3. Lengkapi MainActivity.java
4. buat kelas service
bernama OriginService dengan cara klik kanan pada package project → New →
Service → Service. OriginService akan inherit (extends) kepada
kelas Service.
5. Selanjutnya pada dialog yang tampil, isikan nama kelas service yang diinginkan. Di sini kita menamainya sebagai OriginService dan biarkan exported dan enabled tercentang. Klik Finish untuk menyelesaikan proses.
6. Selanjutnya, buka
berkas AndroidManifest.xml pada package manifest dan
perhatikan isi berkas tersebut. Service yang baru saja kita buat sudah ada
didalam tag <application>:
7. Berkas AndroidManifest sudah dibuat secara
otomatis. Dengan demikian kita sudah bisa menjalankan kelas service tersebut.
Namun, sebelum menjalankan aplikasi, lengkapi kode pada OriginService menjadi seperti
berikut :
8. Selanjutnya pada
MainActivity.java di metode onClick() pada case R.id.btn_Start_service
tambahkan baris berikut :
9. Sehingga kode pada metode onCLic() menjadi seperti ini :
11. Baik, sekarang kita
akan menambahkan sebuah inner class AsyncTask. Ia seakan-akan
menjalankan sebuah proses secaa asynchronous dan
mematikan/menghentikan dirinya sendiri dengan memanggil metode stopSelf(). Lengkapi kodenya menjadi
sebagai berikut :
12. Jalankan
aplikasinya. Klik tombol ‘start service’ dan perhatikan log-nya.
Service dijalankan secara asynchronous dan mematikan dirinya
sendiri setelah proses selesai.
13. Jika berhasil dijalankan, pada log androiod monitor akan seperti ini: 09-22 09:52:25.028 10209-10209/com.contoh.myserviceapp D/OriginService: OriginService dijalankan 09-22 09:52:28.074 10209-10209/com.contoh.myserviceapp D/OriginService: StopService 09-22 09:52:28.078 10209-10209/com.contoh.myserviceapp D/OriginService: onDestroy()
Latihan: Penggunaan Service di
Alarm Manager
Adakalanya kita membutuhkan perlu suatu mekanisme untuk mengulang sebuah proses di waktu tertentu. Misalnya, kita ingin memiliki fungsi pengingat (reminder) pada aplikasi event, jadwal tayang film di bioskop, atau aplikasi alarm untuk mengingatkan kita untuk bangun di pagi hari. Disinilah alarm manager berperan penting.
Alarm manager akan memberikan kemudahan bagi aplikasi untuk melakukan operasi berbasis waktu diluar daur hidup aplikasi itu sendiri.
Contohnya seperti yang baru saja
disebutkan diatas. Umumnya alarm memiliki beberapa karakteristik, antara lain :
- Dapat menjalankan obyek intent
berdasarkan waktu dan interval yang ditentukan.
- Bisa bekerja dengan baik dengan broadcast
receiver untuk menjalankan komponen lain seperti service untuk melakukan
operasi tertentu.
- Alarm berjalan diluar daur hidup aplikasi
induknya sehingga kita bisa merancang fungsi alarm untuk melakukan sebuah
aksi ketika aplikasi sedang tidak dijalankan bahkan ketika peranti dalam
keadaan idle atau sleep.
- Esensi utama dari alarm manager adalah
untuk meminimalkan penggunaan resource dan mengmhindari penggunaan timer
dan background service yang berkepanjangan untuk melakukan operasi atau
aksi yang dibutuhkan.
Penggunaan alarm manager yang baik
adalah dengan menerapkan cara berikut ini:
- Lakukan hanya untuk proses di lokal
- Jaga frekuensi alarm yang dijalankan
dengan interval yang tidak pendek
- Jika tidak terlalu penting, hindari
penggunaan tipe alarm yang dapat membangunkan peranti seperti RTC_WAKEUP
- Jika alarm manager digunakan untuk
menjadwalkan scheduling task yang terhubung ke jaringan
dan melakukan request ke server, misalnya unduh data terbaru
atau sinkronisasi data, maka hindari penggunaan setRepeating() dan
gunakan setInExactRepeating() dengan penggunaan tipe alarm berbasis ELAPSED_REALTIME. Pendekatan
tersebut merupakan strategi untuk mengelompokkan proses alarm dari
aplikasi yang berbeda dengan dijalankan secara bersamaan agar lebih
menghemat daya baterai.
Komentar
Posting Komentar