在 Android 行動裝置上,支援多位使用者可讓使用者在背景 (當其他使用者處於活動狀態時) 和前景 (又稱為「目前使用者」) 執行。為了在適當情況下節省資源,系統會管理使用者的關機作業。一律需要一個前景使用者。
自 Android 10 起,Android Automotive 的預設設定為「只允許」一次最多執行三個使用者 (config_multiuserMaxRunningUsers
)。因此,除了無頭系統使用者 (User 0) 之外,只能設定一個前景使用者和一個背景使用者。
- 在一般情況下,目前使用者會在前景執行,而無頭系統使用者 (使用者 0) 會在背景執行。當使用者移至背景時,系統會停止使用者,但不會鎖定使用者。達到使用者人數上限時,系統會停止並鎖定最近最少使用的背景使用者 (
config_multiuserDelayUserDataLocking
)。 - 在車庫模式期間,系統會重新啟動已停止且已解鎖的背景使用者。
訪客使用者是暫時性的,只能在前景執行。當使用者切換至訪客模式時,系統會停止訪客使用者,且無法在背景執行。
背景使用者程序
當使用者從前景切換至背景 (反之亦然) 時,該使用者的所有活動和前景服務都會終止。這會停止所有服務與這些服務的繫結。不過,仍需進行一些清理工作。只要第一方和原始設備製造商 (OEM) 系統應用程式的持續性服務持續執行,且使用者 (現在為背景) 未停止,就會繼續執行。
持續性服務的問題更嚴重,因為這些服務包含在 Android 記憶體不足 (OOM) 管理系統中,屬於高優先順序。即使前景使用者的應用程式需要更多記憶體,這些持續的背景程序也不會終止。因此,從前景使用者的角度來看,持續性服務會永久保留一定量的記憶體,只有在使用者重新啟動車輛,且所有背景使用者都已停止時,系統才會釋出記憶體。
使用者狀態
使用者會處於停止狀態 (STATE_SHUTDOWN
),直到使用者啟動為止。如果已設定使用者憑證 (例如 PIN 碼),Android 使用者會執行,但會保持鎖定狀態 (STATE_RUNNING_LOCKED
),直到使用者解鎖螢幕為止。當使用者解鎖裝置時,系統會解密其憑證加密儲存空間,並提供該使用者的資料目錄。對於一般使用者切換作業,系統不會停止背景使用者,而是會繼續執行並解鎖 (STATE_RUNNING_UNLOCKED
)。
使用者可用的車庫模式、JobScheduler 和應用程式更新
汽車應用程式更新資料的建議做法是使用 JobScheduler
,透過車庫模式安排工作,以便在裝置處於閒置狀態時執行 (例如從 Google Play 下載應用程式更新)。應用程式使用 JobScheduler
和 JobSchedulerService
註冊工作後,系統會在可行時執行工作。
CarService 會傳送訊號至 JobSchedulerService
,藉此觸發在汽車裝置處於停車模式時閒置的設定工作。JobSchedulerService
必須處於 STATE_RUNNING_UNLOCKED
狀態,才能為背景使用者執行作業。排入 JobSchedulerService
的工作會保留,並在電源週期中持續存在。
如果使用者在電源週期後從未解鎖,JobScheduler
就無法為該使用者執行工作。不過,如果使用者解鎖,且仍處於 STATE_RUNNING_UNLOCKED
中,則可執行使用者的工作。