คำถามที่เกี่ยวข้องกับบริการเบื้องหน้าของ Android

ฉันกำลังสร้างบริการที่ทำงานอยู่ตลอดเวลาใน Android ดังนั้นฉันจึงคิดว่าบริการเบื้องหน้าเป็นตัวเลือกที่ดีที่สุด ฉันมีคำถามทั่วไปบางประการเกี่ยวกับบริการเบื้องหน้าใน Android ขณะที่ฉันกำลังจะใช้งาน Google เอกสารไม่ได้ช่วยฉัน

  1. เมื่อบริการเบื้องหน้าสามารถถูกฆ่าได้?
  2. เราจำเป็นต้องกำหนดบริการเบื้องหน้าเป็น START_STICKY หรือไม่
  3. เราจำเป็นต้องรีสตาร์ทบริการเบื้องหน้าบน Android BOOt หรือไม่หรือบริการจะเริ่มทำงานโดยอัตโนมัติ
  4. เราสามารถเริ่มบริการเบื้องหน้าจากแอปพลิเคชันเดียวกันได้จำนวนเท่าใดในแต่ละครั้ง ฉันได้อ่านบางที่ในลักษณะประจบประแจงมากใน Google เอกสารที่เราสามารถเสนอบริการเบื้องหน้าได้ 3 รายการในแต่ละครั้ง นั่นหมายความว่าอย่างไร
  5. ตามชื่อที่แนะนำบริการเบื้องหน้าขัดจังหวะเธรดหลักหรือ UI หรือไม่

ขอแสดงความนับถือ Utsav.


person Utsav Gupta    schedule 02.09.2014    source แหล่งที่มา
comment
ตรวจสอบสิ่งนี้.. นี่อาจให้ข้อมูลเพิ่มเติมแก่คุณ commonsware.com/blog/2013/07/ 30/   -  person User12111111    schedule 02.09.2014


คำตอบ (1)


 1. When a foreground service can be killed?

กระบวนการที่โฮสต์บริการเบื้องหน้าถือเป็นกระบวนการเบื้องหน้า กระบวนการดังกล่าวถือว่าสำคัญที่สุดและถูกฆ่าตายเป็นอันดับสุดท้าย จากเอกสาร:

โดยทั่วไปแล้ว มีกระบวนการเบื้องหน้าเพียงไม่กี่กระบวนการเท่านั้นในช่วงเวลาใดก็ตาม พวกเขาจะถูกฆ่าเป็นทางเลือกสุดท้ายเท่านั้น หากหน่วยความจำเหลือน้อยจนไม่สามารถวิ่งต่อไปได้ โดยทั่วไป ณ จุดนั้น อุปกรณ์จะเข้าสู่สถานะเพจหน่วยความจำ ดังนั้น จึงจำเป็นต้องฆ่ากระบวนการเบื้องหน้าบางส่วนเพื่อให้อินเทอร์เฟซผู้ใช้ตอบสนอง

2. Do we need to define foreground service as START_STICKY?

ขึ้นอยู่กับงานที่คุณทำอยู่ เนื่องจากคุณเพิ่งบอกว่าบริการทำงานอย่างต่อเนื่อง ฉันเชื่อว่าคุณอาจต้องการมัน ธงมีความหมายเหมือนกันสำหรับทั้งบริการปกติและเบื้องหน้า แฟล็ก START_STICKY บ่งชี้ว่า หากบริการเริ่มต้นใหม่หลังจากที่กระบวนการโฮสต์ถูกหยุดทำงาน onStartCommand ของบริการจะถูกเรียกใช้โดยมีเจตนาเป็นโมฆะ นี่เป็นวิธีที่จะทำให้บริการรับรู้ว่ามีการรีสตาร์ทแล้ว

3. Do we need to restart foreground services on android BOOt or they automatically start.

ไม่ คุณต้องลงทะเบียนเครื่องรับการออกอากาศสำหรับ Intent.ACTION_BOOT_COMPLETED และเริ่มบริการด้วยตนเองจาก onReceive

4. How many foreground services can we start from the same application at a time. 
I have read somewhere in very obsequious manner in google docs that we can nominate 3 foreground service at a time, what does that mean?

ไม่แน่ใจ จะดีมากถ้าคุณสามารถแบ่งปันแหล่งที่มา ไม่ว่าคุณจะมีบริการเบื้องหน้า 1 หรือ 3 รายการ กระบวนการโฮสต์นั้นจะถือเป็นกระบวนการเบื้องหน้า การโฮสต์บริการเบื้องหน้าหลายรายการส่งผลให้เกิดการแจ้งเตือนหลายครั้งในแถบสถานะ ซึ่งทำให้ผู้ใช้ทราบถึงบริการเหล่านั้นที่ทำงานอยู่และรู้วิธีหยุดบริการดังกล่าว คุณยังสามารถมีบริการเบื้องหน้าหนึ่งบริการที่มีหลายเธรดที่ทำงานต่างกันได้

5. As the name suggests does the foreground service interrupts the main or UI thread?

ตามที่อธิบายไว้ข้างต้น บริการเบื้องหน้าทำให้กระบวนการโฮสต์เป็นกระบวนการเบื้องหน้าและผู้ใช้ตระหนักถึงบริการนั้น นอกจากนั้นก็ไม่มีความแตกต่างจากการบริการปกติอย่างแน่นอน ตามค่าเริ่มต้น บริการจะทำงานบนเธรด UI การดำเนินการที่ใช้เวลานานจะต้องเรียกใช้บนเธรดแยกต่างหาก หากอุปกรณ์มีโปรเซสเซอร์หลักหลายตัว เธรด อาจ หรือ อาจไม่ ทำงานบนแกนประมวลผลที่มีอยู่แบบขนาน คุณสามารถอ่าน บล็อก นี้เขียนโดย @fadden จากบล็อก:

บางครั้งผู้คนสงสัยว่าเหตุใดแอปพลิเคชันแบบมัลติเธรดจึงไม่ใช้คอร์ที่มีอยู่ทั้งหมด โดยทั่วไปสิ่งนี้เกิดขึ้นด้วยเหตุผลสองประการ:

  1. การย้ายเธรดระหว่างคอร์มีราคาแพงและคำนึงถึงประสิทธิภาพ
  2. การเปิดใช้งานแกน CPU มีราคาแพงและต้องใช้แบตเตอรี่

ป.ล. : บริการที่ทำงานอย่างต่อเนื่องถือเป็นการต่อต้านรูปแบบใน Android เสมอ เนื่องจากบริการเหล่านี้ใช้ทรัพยากรระบบอย่างต่อเนื่องซึ่งจะส่งผลทางอ้อมต่อแอปพลิเคชันอื่น ๆ ดังนั้นหากจำเป็นต้องใช้ ควรออกแบบอย่างระมัดระวัง

person Manish Mulimani    schedule 06.09.2014
comment
ขอขอบคุณที่ตอบคำถามให้สั้นและชัดเจน และขอแสดงความยินดีที่ได้รับ 50 คะแนน :) - person Utsav Gupta; 06.09.2014