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

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

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

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

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

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

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

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

สถานะผู้ใช้

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

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

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

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

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