ตั้งแต่วันที่ 27 มีนาคม 2025 เป็นต้นไป เราขอแนะนำให้ใช้ android-latest-release
แทน aosp-main
เพื่อสร้างและมีส่วนร่วมใน AOSP โปรดดูข้อมูลเพิ่มเติมที่หัวข้อการเปลี่ยนแปลงใน AOSP
การจัดการระบบของผู้ใช้ในเบื้องหน้าและเบื้องหลัง
จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน
บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ
ใน 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
ระบบจะเรียกใช้งานของผู้ใช้ได้
ตัวอย่างเนื้อหาและโค้ดในหน้าเว็บนี้ขึ้นอยู่กับใบอนุญาตที่อธิบายไว้ในใบอนุญาตการใช้เนื้อหา Java และ OpenJDK เป็นเครื่องหมายการค้าหรือเครื่องหมายการค้าจดทะเบียนของ Oracle และ/หรือบริษัทในเครือ
อัปเดตล่าสุด 2025-07-27 UTC
[[["เข้าใจง่าย","easyToUnderstand","thumb-up"],["แก้ปัญหาของฉันได้","solvedMyProblem","thumb-up"],["อื่นๆ","otherUp","thumb-up"]],[["ไม่มีข้อมูลที่ฉันต้องการ","missingTheInformationINeed","thumb-down"],["ซับซ้อนเกินไป/มีหลายขั้นตอนมากเกินไป","tooComplicatedTooManySteps","thumb-down"],["ล้าสมัย","outOfDate","thumb-down"],["ปัญหาเกี่ยวกับการแปล","translationIssue","thumb-down"],["ตัวอย่าง/ปัญหาเกี่ยวกับโค้ด","samplesCodeIssue","thumb-down"],["อื่นๆ","otherDown","thumb-down"]],["อัปเดตล่าสุด 2025-07-27 UTC"],[],[],null,["# Foreground and background user system handling\n\nIn mobile Android, support for multiple users enables users to run in the\nbackground (when another user is active) and in the foreground (also known as\nthe *current user* ). To conserve resources when appropriate, the system manages\nthe shutting down of users. *One foreground user is always required*.\n\nStarting with Android 10, Android Automotive has a default\nconfiguration of allowing a maximum of three users *only* to run at a time\n(`config_multiuserMaxRunningUsers`). Therefore, in addition to the headless\nsystem user (User 0), only one foreground user and one background user can be configured.\n\n- In typical circumstances, the current user runs in the foreground and the headless system user (User 0) runs in the background. When a user is moved to the background, the user is stopped but not locked. When the maximum number of users is met, the least recently used background user is stopped and locked (`config_multiuserDelayUserDataLocking`).\n- Stopped and unlocked background users are restarted during [Garage Mode](/docs/automotive/power/garage_mode).\n\nGuest users are ephemeral and can run only in the foreground. When a person\nswitches out of guest, the guest user is stopped and can't run in the background.\n\nBackground user processes\n-------------------------\n\nWhen a user is switched from foreground to background (and vice versa), all activities\nand foreground services for that user are terminated. This stops\nall services bound from those services. However, some clean up remains.\n[Persistent\nservices](https://developer.android.com/guide/topics/manifest/application-element.html#persistent) from first-party and OEM system apps continue to run for as long as\nthe (now background) user isn't stopped.\n\nPersistent services are more problematic, as these\nservices are contained in a high-priority bucket in Android's Out of Memory (OOM)\nmanagement system. Even if apps for the foreground user require more memory, those persistent\nbackground processes aren't terminated. As a result, from the foreground user's\npoint of view, the persistent services permanently carve out some amount of memory and\nthat memory is returned only when a person reboots the car and any background\nusers are stopped.\n\nUser state\n----------\n\nA user is in a stopped state (`STATE_SHUTDOWN`) until the user\nis started. If a user credential (such as a PIN) is set, the Android user runs but\nremains locked (`STATE_RUNNING_LOCKED`) until a person unlocks the lockscreen\nfor that user. When the user is unlocked, their [credential encrypted](/docs/security/features/encryption/file-based) storage is decrypted\nand the data directories for that user become available. For typical user switching,\nthe background user isn't stopped and remains running and unlocked\n(`STATE_RUNNING_UNLOCKED`), once unlocked.\n\nGarage Mode, JobScheduler, and app updates for users\n----------------------------------------------------\n\nThe recommended technique for Automotive apps to update data is to use [`JobScheduler`](https://developer.android.com/reference/android/app/job/JobScheduler)\nto schedule jobs to run when a device is in the idle state, through [Garage Mode](/docs/automotive/power/garage_mode) (for example, downloading\napp updates from Google Play). After apps register jobs with `JobScheduler` and\n[`JobSchedulerService`](https://android.googlesource.com/platform/frameworks/base/+/3426b72/services/core/java/com/android/server/job/JobSchedulerService.java),\nthe jobs are run when possible.\n\nCarService sends a signal to `JobSchedulerService` to trigger jobs set to run\nwhen the Automotive device is [idle](https://developer.android.com/reference/android/app/job/JobInfo.Builder#setRequiresDeviceIdle(boolean))\nthrough Garage Mode. For `JobSchedulerService` to run jobs for a background user, that\nuser must be in the state `STATE_RUNNING_UNLOCKED`. Jobs queued\ninto `JobSchedulerService` are persisted and survive across power cycles.\n\n`JobScheduler` can't run jobs for a specific user if the user was never\nunlocked after a power cycle. However, when the user is unlocked, and if the user remains in\n`STATE_RUNNING_UNLOCKED`, jobs for the user can be run."]]