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 จากบล็อก:
บางครั้งผู้คนสงสัยว่าเหตุใดแอปพลิเคชันแบบมัลติเธรดจึงไม่ใช้คอร์ที่มีอยู่ทั้งหมด โดยทั่วไปสิ่งนี้เกิดขึ้นด้วยเหตุผลสองประการ:
- การย้ายเธรดระหว่างคอร์มีราคาแพงและคำนึงถึงประสิทธิภาพ
- การเปิดใช้งานแกน CPU มีราคาแพงและต้องใช้แบตเตอรี่
ป.ล. : บริการที่ทำงานอย่างต่อเนื่องถือเป็นการต่อต้านรูปแบบใน Android เสมอ เนื่องจากบริการเหล่านี้ใช้ทรัพยากรระบบอย่างต่อเนื่องซึ่งจะส่งผลทางอ้อมต่อแอปพลิเคชันอื่น ๆ ดังนั้นหากจำเป็นต้องใช้ ควรออกแบบอย่างระมัดระวัง
person
Manish Mulimani
schedule
06.09.2014