از 27 مارس 2025، توصیه می کنیم از android-latest-release
به جای aosp-main
برای ساختن و کمک به AOSP استفاده کنید. برای اطلاعات بیشتر، به تغییرات AOSP مراجعه کنید.
مدیریت سیستم کاربر پیش زمینه و پس زمینه
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
در اندروید موبایل، پشتیبانی از چندین کاربر به کاربران امکان میدهد در پسزمینه (زمانی که کاربر دیگری فعال است) و در پیشزمینه (همچنین به عنوان کاربر فعلی شناخته میشود) اجرا شوند. برای حفظ منابع در صورت لزوم، سیستم خاموش کردن کاربران را مدیریت می کند. یک کاربر پیش زمینه همیشه مورد نیاز است .
با شروع Android 10، Android Automotive دارای یک پیکربندی پیشفرض است که به حداکثر سه کاربر اجازه میدهد در یک زمان اجرا شوند ( config_multiuserMaxRunningUsers
). بنابراین، علاوه بر کاربر سیستم بدون سر (User 0)، تنها یک کاربر پیش زمینه و یک کاربر پس زمینه قابل پیکربندی است.
- در شرایط معمولی، کاربر فعلی در پیش زمینه و کاربر سیستم بدون سر (User 0) در پس زمینه اجرا می شود. هنگامی که یک کاربر به پس زمینه منتقل می شود، کاربر متوقف می شود اما قفل نمی شود. وقتی حداکثر تعداد کاربران برآورده شد، کاربر پسزمینهای که اخیراً استفاده شده است متوقف و قفل میشود (
config_multiuserDelayUserDataLocking
). - کاربران پسزمینه متوقف شده و قفلشده در طول حالت گاراژ مجدداً راهاندازی میشوند.
کاربران مهمان زودگذر هستند و فقط می توانند در پیش زمینه اجرا شوند. وقتی فردی از مهمان خارج می شود، کاربر مهمان متوقف می شود و نمی تواند در پس زمینه اجرا شود.
فرآیندهای کاربر پس زمینه
هنگامی که یک کاربر از پیش زمینه به پس زمینه تغییر می کند (و بالعکس)، تمام فعالیت ها و خدمات پیش زمینه برای آن کاربر خاتمه می یابد. این همه سرویس های محدود شده از آن سرویس ها را متوقف می کند. با این حال، مقداری پاکسازی باقی مانده است. تا زمانی که کاربر (اکنون پسزمینه) متوقف نشود، سرویسهای دائمی از برنامههای سیستم شخص اول و OEM به کار خود ادامه میدهند.
سرویسهای مداوم مشکلسازتر هستند، زیرا این سرویسها در یک سطل با اولویت بالا در سیستم مدیریت حافظه خارج از اندروید (OOM) قرار دارند. حتی اگر برنامههای کاربر پیشزمینه به حافظه بیشتری نیاز داشته باشند، این فرآیندهای پسزمینه دائمی خاتمه نمییابند. در نتیجه، از دیدگاه کاربر پیشزمینه، سرویسهای مداوم به طور دائم مقداری از حافظه را ایجاد میکنند و این حافظه تنها زمانی باز میگردد که شخصی ماشین را راهاندازی مجدد کند و هر کاربر پسزمینه متوقف شود.
وضعیت کاربر
یک کاربر در حالت توقف ( STATE_SHUTDOWN
) است تا زمانی که کاربر راه اندازی شود. اگر اعتبار کاربری (مانند پین) تنظیم شود، کاربر Android اجرا میشود اما قفل میماند ( STATE_RUNNING_LOCKED
) تا زمانی که شخصی قفل صفحه قفل آن کاربر را باز کند. وقتی قفل کاربر باز می شود، حافظه رمزگذاری شده اعتبار او رمزگشایی می شود و دایرکتوری های داده برای آن کاربر در دسترس قرار می گیرد. برای تعویض کاربر معمولی، کاربر پسزمینه متوقف نمیشود و پس از باز شدن قفل، در حال اجرا و باز میماند ( STATE_RUNNING_UNLOCKED
).
حالت Garage، JobScheduler و بهروزرسانیهای برنامه برای کاربران
روش توصیه شده برای برنامههای Automotive برای بهروزرسانی دادهها، استفاده از JobScheduler
برای برنامهریزی کارها برای اجرای زمانی که دستگاه در حالت بیکار است، از طریق Garage Mode (به عنوان مثال، دانلود بهروزرسانیهای برنامه از Google Play) است. پس از اینکه برنامهها مشاغل را با JobScheduler
و JobSchedulerService
ثبت کردند، کارها در صورت امکان اجرا میشوند.
CarService سیگنالی را به JobSchedulerService
می فرستد تا کارهای تنظیم شده برای اجرا در زمانی که دستگاه Automotive در حالت گاراژ بیکار است، فعال شود. برای اینکه JobSchedulerService
کارهای یک کاربر پس زمینه را اجرا کند، آن کاربر باید در وضعیت STATE_RUNNING_UNLOCKED
باشد. مشاغلی که در صف JobSchedulerService
قرار میگیرند ادامه پیدا میکنند و در چرخههای قدرت زنده میمانند.
JobScheduler
نمی تواند کارها را برای یک کاربر خاص اجرا کند اگر کاربر پس از یک چرخه برق هرگز قفل آن باز نشده باشد. با این حال، وقتی قفل کاربر باز است، و اگر کاربر در STATE_RUNNING_UNLOCKED
باقی بماند، کارها برای کاربر قابل اجرا هستند.
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","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-29 بهوقت ساعت هماهنگ جهانی."],[],[],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."]]