เป็นไปได้ไหมที่จะหยุดบริการด้วย android:persistent=true

ฉันต้องการสร้างบริการระบบในขณะที่ใช้สิทธิ์ของระบบ บริการควรเชื่อมโยงกับกิจกรรมและสอดคล้องกับข้อกำหนดต่อไปนี้

  1. บริการจะไม่ถูกฆ่าโดยระบบ
  2. เมื่อมีการร้องขอก็สามารถหยุดให้บริการได้

เพื่อให้บรรลุข้อกำหนดแรก ฉันได้สร้างบริการของฉันโดยใช้ Context.bindService() สร้างบริการระบบที่เชื่อมโยงและเพิ่ม android:persistent="true" ลงในรายการบริการเพื่อแจ้งให้ระบบทราบว่าบริการนี้ควรทำงานอยู่ตลอดเวลา

น่าเสียดายที่หลังจากเพิ่ม android:persistent="true" ฉันไม่สามารถหยุดบริการได้ทั้งโดย Context.unbindService() หรือโดยการเรียก Context.stopService()

เป็นไปได้ไหมที่จะหยุดบริการด้วย android:persistent="true" และหากไม่ใช่สิ่งที่ฉันควรเป็นแนวทางเพื่อให้บรรลุข้อกำหนดทั้งสองข้อ


person Shulmant    schedule 28.12.2014    source แหล่งที่มา
comment
โปรดสังเกตว่าฉันกำลังลงนามบริการด้วยรหัสระบบที่อนุญาตให้ใช้ความคงอยู่ในขณะที่สร้างบริการระบบ   -  person Shulmant    schedule 28.12.2014


คำตอบ (1)


ฉันเพิ่งผ่านสิ่งที่คล้ายกัน ตามคำตอบนี้ คุณต้องโทร stopService() จากนั้น unBindService() -- โทรทั้งสองรายการตามลำดับนั้น ใส่สิ่งเหล่านี้ไว้ในเมธอด onDestroy ของกิจกรรมโฮสต์ นอกจากนี้ ในกรณีที่บริการของคุณถูกปลุกเป็นระยะโดย AlarmManager เช่นเดียวกับของฉัน อย่าลืมโทร cancel() ด้วย

ดังที่คุณคงทราบแล้วว่าคุณสามารถตรวจสอบบริการที่ทำงานอยู่ใน ApplicationManager ได้ บังคับหยุดบริการใดๆ ที่คุณอาจใช้งานด้วยโค้ดเก่าเมื่อทดสอบการเปลี่ยนแปลงเหล่านี้

เกี่ยวกับธง persistent ฉันคิดว่า ตามนี้ มีผลกับนักพัฒนาแอประบบเท่านั้น ในแอป Marketplace ปกติ ฉันคิดว่าธงนั้นถูกละเลย

person JASON G PETERSON    schedule 28.12.2014
comment
Jason ฉันได้สร้างบริการของฉันโดยการเรียก Context.bindService() ดังนั้นการเรียก Context.unbindService() ควรทำลายกระบวนการตามที่กล่าวไว้ใน เอกสารประกอบของ Android หากคอมโพเนนต์เรียก bindService() เพื่อสร้างบริการ (และไม่ได้เรียก onStartCommand()) บริการจะทำงานตราบใดที่คอมโพเนนต์นั้นถูกผูกไว้กับมัน . เมื่อบริการถูกยกเลิกการเชื่อมโยงจากไคลเอนต์ทั้งหมด ระบบจะทำลายมัน น่าเสียดายที่การเพิ่ม android:persistent=true ทำให้ฉันไม่สามารถหยุดบริการด้วยวิธีการดังกล่าว - person Shulmant; 28.12.2014