ב-Android לנייד, התמיכה בכמה משתמשים מאפשרת למשתמשים להריץ את האפליקציה ברקע (כשמשתמש אחר פעיל) ובחזית (המכונה גם המשתמש הנוכחי). כדי לחסוך במשאבים לפי הצורך, המערכת מנהלת השבתת המשתמשים. תמיד נדרש משתמש אחד בחזית.
החל מ-Android 10, הגדרת ברירת המחדל של Android Automotive מאפשרת להפעיל רק שלושה משתמשים בו-זמנית (config_multiuserMaxRunningUsers
). לכן, בנוסף למשתמש המערכת ללא ראש (משתמש 0), אפשר להגדיר רק משתמש אחד בחזית ומשתמש אחד ברקע.
- בנסיבות רגילות, המשתמש הנוכחי פועל בחזית והמשתמש ללא ראש במערכת (משתמש 0) פועל ברקע. כשמשתמשים מועברים לרקע, הם מופסקים אבל לא ננעלים. כשמגיעים למספר המשתמשים המקסימלי, המשתמש ברקע שלא נעשה בו שימוש לאחרונה מושבת ונעול (
config_multiuserDelayUserDataLocking
). - משתמשים ברקע שנעצרו ולא נעולים מופעלים מחדש במהלך מצב חניה.
משתמשי אורח הם זמניים ויכולים לפעול רק בחזית. כשאדם יוצא ממצב אורח, המשתמש האורח עצר ולא יכול לפעול ברקע.
תהליכי משתמש ברקע
כשמשתמש עובר מחזית לרקע (ולהפך), כל הפעילויות ושירותי החזית של אותו משתמש מסתיימים. הפעולה הזו תפסיק את כל השירותים שמקושרים לשירותים האלה. עם זאת, עדיין יש צורך לבצע פעולות ניקוי מסוימות. קבוע שירותים מאפליקציות מערכת של צד ראשון ומאפליקציות מערכת של OEM (יצרן ציוד מקורי) ימשיכו לפעול כל עוד לא עוצרים את המשתמש (שנקרא עכשיו ברקע).
השימוש בשירותים קבועים הוא בעייתי יותר, כי השירותים נכללים בקטגוריה בעדיפות גבוהה בקטע 'חסר הזיכרון' (OOM) של Android במערכת הניהול. גם אם אפליקציות של המשתמש שפועל בחזית דורשות יותר זיכרון, חשוב לזכור תהליכי רקע לא מסתיימים. כתוצאה מכך, מנקודת המבט של המשתמש בחזית, השירותים הקבועים תופסים כמות מסוימת של זיכרון באופן קבוע, והזיכרון הזה מוחזר רק כשמשתמש מפעיל מחדש את הרכב ומפסיק את כל המשתמשים ברקע.
מצב המשתמש
המשתמש נמצא בסטטוס מושהה (STATE_SHUTDOWN
) עד שהוא מופעל. אם מוגדרים פרטי כניסה של משתמש (כמו קוד אימות), המשתמש ב-Android פועל אבל נשאר נעול (STATE_RUNNING_LOCKED
) עד שמישהו פותח את מסך הנעילה של המשתמש הזה. כשמנעולים את המכשיר, האחסון של פרטי הכניסה המוצפנים של המשתמש מפוענח וספריות הנתונים של המשתמש הופכות לזמינות. במעבר משתמש רגיל, המשתמש ברקע לא מושבת, והוא ממשיך לפעול וללא נעילת המסך (STATE_RUNNING_UNLOCKED
) אחרי שהנעילה שלו מבוטלת.
מצב מוסך, JobScheduler ועדכוני אפליקציות למשתמשים
השיטה המומלצת לעדכון נתונים באפליקציות של כלי רכב היא להשתמש ב-JobScheduler
כדי לתזמן משימות שיפעלו כשהמכשיר במצב לא פעיל, באמצעות מצב חניון (לדוגמה, הורדה
עדכונים לאפליקציה מ-Google Play). אחרי שאפליקציות רושמות משימות עם JobScheduler
ועם
JobSchedulerService
,
המשימות ירוצו כשהדבר אפשרי.
CarService שולח אות אל JobSchedulerService
כדי להפעיל משימות שהוגדרו לפעול
כשמכשיר כלי הרכב לא פעיל
באמצעות 'מצב חנייה'. כדי ש-JobSchedulerService
יריץ משימות למשתמש ברקע,
המשתמש חייב להיות במצב STATE_RUNNING_UNLOCKED
. משימות בתור
אל JobSchedulerService
נשמרות ושורדים לאורך מחזורי כוח.
ל-JobScheduler
אין אפשרות להריץ משימות עבור משתמש מסוים אם המשתמש אף פעם לא
פתוח לאחר מחזור חשמל. עם זאת, כשהמשתמש לא נעול ואם המשתמש נשאר בבית
STATE_RUNNING_UNLOCKED
, אפשר להריץ משימות למשתמש.