Apakah mungkin menghentikan layanan dengan Android:persistent=true

Saya ingin membuat layanan sistem sambil menggunakan izin sistem. Layanan harus dibatasi pada suatu aktivitas dan sesuai dengan persyaratan berikut

  1. Layanan tidak akan dimatikan oleh sistem.
  2. Jika diminta, layanan dapat dihentikan.

Untuk mencapai persyaratan pertama, saya telah membuat layanan saya dengan menggunakan Context.bindService() membuat layanan sistem terikat dan menambahkan Android:persistent="true" ke manifes layanan yang memberi tahu sistem bahwa layanan ini harus tetap berjalan setiap saat.

Sayangnya setelah menambahkan Android:persistent="true" saya tidak dapat menghentikan layanan baik dengan Context.unbindService() atau dengan memanggil Context.stopService()

Apakah mungkin untuk menghentikan layanan dengan Android:persistent="true" dan jika tidak, apa yang harus menjadi pendekatan saya untuk mencapai kedua persyaratan tersebut


person Shulmant    schedule 28.12.2014    source sumber
comment
harap perhatikan saya menandatangani layanan dengan kunci sistem yang memungkinkan penggunaan persistensi saat membuat layanan sistem   -  person Shulmant    schedule 28.12.2014


Jawaban (1)


Saya baru saja mengalami hal serupa. Sesuai dengan jawaban ini , Anda perlu menelepon stopService() lalu unBindService() -- memanggil keduanya secara berurutan. Masukkan ini ke dalam metode onDestroy aktivitas host. Selain itu, jika layanan Anda dibangunkan secara berkala oleh AlarmManager, seperti milik saya, pastikan untuk menghubungi cancel() juga.

Seperti yang mungkin Anda ketahui, Anda dapat memeriksa layanan yang berjalan di ApplicationManager. Hentikan paksa layanan apa pun yang mungkin Anda jalankan dengan kode lama saat menguji perubahan ini.

Mengenai tanda persistent, menurut saya, sesuai ini, bahwa ini hanya berlaku untuk pengembang aplikasi sistem. Di aplikasi pasar biasa, menurut saya benderanya diabaikan.

person JASON G PETERSON    schedule 28.12.2014
comment
Jason Saya telah membuat layanan saya dengan memanggil Context.bindService() oleh karena itu memanggil Context.unbindService() seharusnya menghancurkan proses seperti yang disebutkan dalam Dokumentasi Android Jika sebuah komponen memanggil bindService() untuk membuat layanan (dan onStartCommand() tidak dipanggil), maka layanan hanya berjalan selama komponen terikat padanya . Setelah layanan tidak terikat dari semua klien, sistem akan menghancurkannya. Sayangnya menambahkan android:persistent=true Mencegah saya menghentikan layanan dengan metode seperti itu. - person Shulmant; 28.12.2014