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

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

با شروع 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 باقی بماند، کارها برای کاربر قابل اجرا هستند.