مدیریت سیستم کاربر پیش زمینه و پس زمینه

در اندروید موبایل، پشتیبانی از چندین کاربر به کاربران امکان می‌دهد در پس‌زمینه (زمانی که کاربر دیگری فعال است) و در پیش‌زمینه (همچنین به عنوان کاربر فعلی شناخته می‌شود) اجرا شوند. برای حفظ منابع در صورت لزوم، سیستم خاموش کردن کاربران را مدیریت می کند. یک کاربر پیش زمینه همیشه مورد نیاز است .

با شروع Android 10، Android Automotive دارای یک پیکربندی پیش‌فرض است که به حداکثر سه کاربر اجازه می‌دهد در یک زمان اجرا شوند ( config_multiuserMaxRunningUsers ). بنابراین، علاوه بر کاربر سیستم هدلس (کاربر 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 باقی بماند، می‌توان کارها را برای کاربر اجرا کرد.