טיפול במערכת משתמש בחזית וברקע

באנדרואיד נייד, תמיכה במספר משתמשים מאפשרת למשתמשים לרוץ ברקע (כאשר משתמש אחר פעיל) ובחזית (הידוע גם בשם המשתמש הנוכחי). כדי לחסוך במשאבים כאשר הדבר מתאים, המערכת מנהלת את כיבוי המשתמשים. תמיד נדרש משתמש אחד בחזית .

החל מ-Android 10, ל-Android Automotive יש תצורת ברירת מחדל המאפשרת לכל היותר שלושה משתמשים לפעול בכל פעם ( config_multiuserMaxRunningUsers ). לכן, בנוסף למשתמש המערכת חסר הראש (משתמש 0), ניתן להגדיר רק משתמש אחד בחזית ומשתמש רקע אחד.

  • בנסיבות טיפוסיות, המשתמש הנוכחי פועל בחזית ומשתמש המערכת חסר הראש (משתמש 0) פועל ברקע. ברגע שמשתמש מועבר לרקע, המשתמש נעצר אך לא ננעל. כאשר המספר המרבי של משתמשים מתקיים, משתמש הרקע שנעשה בו שימוש פחות לאחרונה נעצר וננעל ( config_multiuserDelayUserDataLocking ).
  • רקע עצורים ונעולים משתמשים מופעלים מחדש במהלך מצב מוסך .

משתמשים אורחים הם ארעיים ויכולים לפעול רק בחזית. כאשר אדם עובר מאורח, המשתמש האורח נעצר ואינו יכול לפעול ברקע.

תהליכי משתמש ברקע

כאשר מתרחש מעבר משתמש מחזית לרקע (ולהיפך), כל הפעילויות ושירותי החזית של אותו משתמש מופסקים. זה מוביל להפסקת כל השירותים הקשורים לשירותים אלה. עם זאת, נותרו חלק מהניקיון. שירותים מתמשכים מיישומי צד ראשון ומערכת OEM ממשיכים לפעול כל עוד המשתמש (כיום ברקע) אינו נעצר.

שירותים מתמשכים הם בעייתיים יותר מכיוון ששירותים אלו כלולים בדלי בעדיפות גבוהה במערכת הניהול Out of Memory (OOM) של אנדרואיד. גם אם אפליקציות למשתמש הקדמי דורשות יותר זיכרון, תהליכי הרקע המתמשכים האלה לא נסתיימו. כתוצאה מכך, מנקודת המבט של המשתמש בחזית, השירותים המתמשכים גוזרים לצמיתות כמות מסוימת של זיכרון והזיכרון הזה מוחזר רק כאשר אדם מאתחל את המכונית וכל משתמש ברקע נעצר.

מצב משתמש

משתמש נמצא במצב עצור ( STATE_SHUTDOWN ) עד שהמשתמש מופעל. אם הוגדר אישור משתמש (כגון PIN), משתמש Android פועל אך נשאר נעול ( STATE_RUNNING_LOCKED ) עד שאדם יבטל את נעילת מסך הנעילה עבור אותו משתמש. כאשר המשתמש אינו נעול, האחסון המוצפן של האישורים שלו מפוענח וספריות הנתונים עבור אותו משתמש הופכות לזמינות. עבור החלפת משתמש טיפוסית, המשתמש ברקע לא נעצר ונשאר פועל ולא נעול ( STATE_RUNNING_UNLOCKED ), לאחר ביטול הנעילה.

מצב מוסך, JobScheduler ועדכוני אפליקציה למשתמשים

הטכניקה המומלצת עבור יישומי רכב לעדכן נתונים היא להשתמש ב-JobScheduler כדי לתזמן משימות לפעול כאשר מכשיר נמצא במצב לא פעיל, דרך Garage Mode (לדוגמה, הורדת עדכוני אפליקציה מחנות Google Play). לאחר שאפליקציות רושמות משרות עם JobScheduler ו-JobSchedulerService, העבודות מופעלות במידת האפשר.

CarService שולח אות ל-JobSchedulerService כדי להפעיל עבודות שהוגדרו לפעול כאשר מכשיר הרכב אינו פעיל דרך מצב מוסך. כדי ש-JobSchedulerService יפעיל משימות עבור משתמשי רקע, המשתמש הזה חייב להיות במצב STATE_RUNNING_UNLOCKED . העבודות המונחות בתור ל-JobSchedulerService נמשכות ושורדות לאורך מחזורי הפעלה.

JobScheduler לא יכול להריץ משימות עבור משתמש ספציפי אם המשתמש מעולם לא בוטלה לאחר מחזור כיבוי. עם זאת, לאחר ביטול הנעילה, ואם המשתמש נשאר ב- STATE_RUNNING_UNLOCKED , ניתן להפעיל משימות עבור המשתמש.