การจัดการระบบของผู้ใช้ในเบื้องหน้าและเบื้องหลัง

ใน Android บนอุปกรณ์เคลื่อนที่ การรองรับผู้ใช้หลายคนช่วยให้ผู้ใช้สามารถทำงานในเบื้องหลัง (เมื่อผู้ใช้รายอื่นใช้งานอยู่) และในเบื้องหน้า (หรือที่เรียกว่าผู้ใช้ปัจจุบัน) ระบบจะจัดการการปิดผู้ใช้เพื่อประหยัดทรัพยากรตามความเหมาะสม ต้องมีผู้ใช้ที่ทำงานอยู่เบื้องหน้า 1 คนเสมอ

ตั้งแต่ Android 10 เป็นต้นไป Android Automotive จะมีการกำหนดค่าเริ่มต้นที่อนุญาตให้ผู้ใช้ทำงานได้สูงสุด 3 คนเท่านั้นพร้อมกัน (config_multiuserMaxRunningUsers) ดังนั้น นอกเหนือจากผู้ใช้ระบบแบบ headless (ผู้ใช้ 0) แล้ว คุณจะกำหนดค่าได้เฉพาะผู้ใช้ที่ทำงานอยู่เบื้องหน้า 1 คนและผู้ใช้ที่ทำงานอยู่เบื้องหลัง 1 คนเท่านั้น

  • ในกรณีทั่วไป ผู้ใช้ปัจจุบันจะทำงานอยู่เบื้องหน้าและผู้ใช้ระบบแบบไม่มีส่วนแสดงผล (ผู้ใช้ 0) จะทำงานอยู่เบื้องหลัง เมื่อผู้ใช้ถูกย้ายไปยังเบื้องหลัง ระบบจะหยุดผู้ใช้ไว้แต่ไม่ได้ล็อก เมื่อผู้ใช้ครบจำนวนสูงสุด ระบบจะหยุดและล็อกผู้ใช้เบื้องหลังที่ใช้ล่าสุด (config_multiuserDelayUserDataLocking)
  • ระบบจะรีสตาร์ทผู้ใช้ที่หยุดและปลดล็อกอยู่เบื้องหลังระหว่างโหมดโรงรถ

ผู้ใช้ชั่วคราวจะมีอายุสั้นและทำงานได้เฉพาะในเบื้องหน้า เมื่อผู้ใช้ออกจากโหมดผู้มาเยือน ระบบจะหยุดผู้ใช้ชั่วคราวและไม่สามารถทำงานในเบื้องหลังได้

กระบวนการของผู้ใช้ในเบื้องหลัง

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

บริการถาวรจะมีปัญหามากกว่า เนื่องจากบริการเหล่านี้อยู่ในที่เก็บข้อมูลที่มีลำดับความสำคัญสูงในระบบการจัดการหน่วยความจำไม่เพียงพอ (OOM) ของ Android แม้ว่าแอปสําหรับผู้ใช้ที่ทำงานอยู่เบื้องหน้าจะต้องการหน่วยความจํามากขึ้น แต่ระบบก็จะไม่สิ้นสุดกระบวนการที่ทำงานอยู่เบื้องหลังอย่างต่อเนื่อง ด้วยเหตุนี้ จากมุมมองของผู้ใช้ที่ทำงานอยู่เบื้องหน้า บริการแบบถาวรจะจองหน่วยความจำบางส่วนไว้อย่างถาวร และหน่วยความจำดังกล่าวจะคืนกลับมาก็ต่อเมื่อผู้ใช้รีบูตรถและผู้ใช้เบื้องหลังหยุดทำงาน

สถานะผู้ใช้

ผู้ใช้จะอยู่ในสถานะหยุด (STATE_SHUTDOWN) จนกว่าผู้ใช้จะเริ่มต้น หากตั้งค่าข้อมูลเข้าสู่ระบบของผู้ใช้ (เช่น PIN) ไว้ ผู้ใช้ Android จะทำงานแต่ยังคงล็อกอยู่ (STATE_RUNNING_LOCKED) จนกว่าผู้ใช้รายนั้นจะปลดล็อกหน้าจอล็อก เมื่อปลดล็อกผู้ใช้แล้ว ระบบจะถอดรหัสพื้นที่เก็บข้อมูลที่เข้ารหัสข้อมูลเข้าสู่ระบบของผู้ใช้รายนั้น และไดเรกทอรีข้อมูลของผู้ใช้รายดังกล่าวจะพร้อมใช้งาน สําหรับการเปลี่ยนผู้ใช้ทั่วไป ระบบจะไม่หยุดผู้ใช้ในเบื้องหลังและยังคงทํางานอยู่และปลดล็อกอยู่ (STATE_RUNNING_UNLOCKED) เมื่อปลดล็อกแล้ว

โหมดโรงรถ, JobScheduler และการอัปเดตแอปสำหรับผู้ใช้

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

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

JobScheduler ไม่สามารถเรียกใช้งานสําหรับผู้ใช้ที่เฉพาะเจาะจงได้หากผู้ใช้ไม่เคยปลดล็อกหลังจากปิดเครื่องแล้วเปิดใหม่ อย่างไรก็ตาม เมื่อปลดล็อกผู้ใช้แล้ว และหากผู้ใช้ยังคงอยู่ใน STATE_RUNNING_UNLOCKED ระบบจะเรียกใช้งานของผู้ใช้ได้