"Jika Anda memulai Layanan android dengan startService(..)
Layanan itu akan tetap berjalan sampai Anda secara eksplisit memanggil stopService(..)
. Ada dua alasan mengapa layanan dapat dijalankan oleh sistem. Jika seseorang memanggil Context.startService()
maka sistem akan mengambil layanan (membuatnya dan memanggil onCreate()
metodenya jika diperlukan) dan kemudian memanggil onStartCommand(Intent, int, int)
metodenya dengan argumen yang diberikan oleh klien. Layanan pada saat ini akan terus berjalan hingga Context.stopService()
atau stopSelf()
dipanggil. Perhatikan bahwa beberapa panggilan ke Context.startService()
tidak bersarang (meskipun mereka menghasilkan beberapa panggilan yang sesuai ke onStartCommand()
), jadi tidak ada peduli berapa kali dimulai, layanan akan dihentikan satu kali Context.stopService()
atau stopSelf()
dipanggil; namun, layanan dapat menggunakanstopSelf(int)
metode untuk memastikan layanan tidak dihentikan sampai maksud yang dimulai telah diproses.
Klien juga dapat menggunakan Context.bindService()
untuk mendapatkan koneksi tetap ke layanan. Ini juga membuat layanan jika belum berjalan (memanggil onCreate()
sambil melakukannya), tetapi tidak memanggil onStartCommand()
. Klien akan menerima IBinder
objek yang dikembalikan layanan dari onBind(Intent)
metodenya, memungkinkan klien untuk kemudian melakukan panggilan kembali ke layanan. Layanan akan tetap berjalan selama koneksi dibuat (apakah klien mempertahankan referensi pada Layanan atau tidak IBinder
). Biasanya yang IBinder
dikembalikan adalah untuk antarmuka kompleks yang telah ditulis dalam AIDL.
Sebuah layanan dapat dimulai dan memiliki koneksi yang terikat padanya. Dalam kasus seperti itu, sistem akan menjaga layanan tetap berjalan selama layanan tersebut dimulai atau ada satu atau beberapa koneksi dengannya dengan Context.BIND_AUTO_CREATE
flag. Setelah tidak satu pun dari situasi ini berlaku, metode Layanan onDestroy()
dipanggil dan layanan dihentikan secara efektif. Semua pembersihan (menghentikan utas, membatalkan pendaftaran penerima) harus selesai setelah kembali dari onDestroy()
. "