"หากคุณเริ่มบริการ Android ด้วยstartService(..)
บริการนั้นจะยังคงทำงานต่อไปจนกว่าคุณจะเรียกใช้อย่างชัดเจนstopService(..)
มีเหตุผลสองประการที่ระบบสามารถเรียกใช้บริการได้หากมีคนโทรContext.startService()
เข้าระบบจะดึงข้อมูลบริการ (สร้างและเรียกonCreate()
ใช้เมธอดหาก จำเป็น) จากนั้นเรียกonStartCommand(Intent, int, int)
ใช้เมธอดด้วยอาร์กิวเมนต์ที่ไคลเอ็นต์ให้มาบริการจะทำงานต่อไปจนกว่าจะมีการเรียกContext.stopService()
หรือstopSelf()
ถูกเรียกโปรดทราบว่าการเรียกหลายครั้งที่Context.startService()
จะไม่ซ้อนกัน (แม้ว่าจะส่งผลให้มีการเรียกที่ตรงกันหลายครั้งonStartCommand()
) ดังนั้นจึงไม่มี ไม่ว่าจะเริ่มบริการกี่ครั้งก็ตามจะหยุดบริการหนึ่งครั้งContext.stopService()
หรือวิธีการเพื่อให้แน่ใจว่าบริการจะไม่หยุดจนกว่าจะมีการประมวลผล Intent เริ่มต้น stopSelf()
ถูกเรียกอย่างไรก็ตามบริการต่างๆสามารถใช้บริการได้stopSelf(int)
ไคลเอ็นต์ยังสามารถใช้Context.bindService()
เพื่อรับการเชื่อมต่อแบบถาวรกับบริการ นี้เช่นเดียวกันสร้างบริการถ้าไม่ได้ทำงานแล้ว (เรียกonCreate()
ในขณะที่การทำเช่นนั้น) onStartCommand()
แต่ไม่ได้โทร ไคลเอนต์จะได้รับIBinder
ออบเจ็กต์ที่บริการส่งคืนจากonBind(Intent)
เมธอดของมันทำให้ไคลเอนต์สามารถโทรกลับไปที่บริการได้ บริการจะยังคงทำงานตราบเท่าที่มีการสร้างการเชื่อมต่อ (ไม่ว่าไคลเอ็นต์จะยังคงมีการอ้างอิงในบริการหรือไม่IBinder
ก็ตาม) โดยปกติการIBinder
ส่งคืนจะเป็นของอินเทอร์เฟซที่ซับซ้อนซึ่งถูกเขียนใน AIDL
บริการสามารถเริ่มต้นและเชื่อมต่อกับบริการได้ ในกรณีเช่นนี้ระบบจะให้บริการทำงานต่อไปตราบเท่าที่เริ่มทำงานหรือมีการเชื่อมต่ออย่างน้อยหนึ่งรายการกับContext.BIND_AUTO_CREATE
แฟล็ก เมื่อสถานการณ์เหล่านี้ไม่เกิดขึ้นระบบonDestroy()
จะเรียกใช้วิธีการของบริการและบริการจะสิ้นสุดลงอย่างมีประสิทธิภาพ การทำความสะอาดทุกชนิด (หยุดกระทู้, ยกเลิกการลงทะเบียนรับ) ควรจะเสร็จสมบูรณ์เมื่อกลับมาจากonDestroy()
."