前台和後台使用者係統處理

在行動 Android 中,對多個用戶的支援使用戶能夠在後台(當另一個用戶處於活動狀態時)和前台(也稱為當前用戶)運行。為了在適當的時候節省資源,系統會管理使用者的關閉。始終需要一個前台用戶

從 Android 10 開始,Android Automotive 的預設配置為一次最多允許三個使用者執行 ( config_multiuserMaxRunningUsers )。因此,除了無頭系統User(User 0)外,只能配置1個前台User和1個後台User。

  • 在典型情況下,目前 User 在前台運行,無頭系統使用者(User 0)在背景運行。一旦用戶移至後台,該用戶將被停止但不會被鎖定。當達到最大用戶數時,最近最少使用的後台用戶將被停止並鎖定( config_multiuserDelayUserDataLocking )。
  • 停止並解鎖的後台 用戶在車庫模式期間重新啟動。

來賓用戶是短暫的,只能在前台運行。當某人退出訪客時,訪客使用者將停止並且無法在背景運行。

後台用戶進程

當使用者從前台切換到後台(反之亦然)時,該使用者的所有活動和前台服務都會終止。這會導致與這些服務綁定的所有服務停止。然而,一些清理工作仍然存在。只要(現在是後台)用戶不停止,來自第一方和 OEM 系統應用程式的 持久服務就會繼續運作。

持久性服務的問題更大,因為這些服務包含在 Android 記憶體不足 (OOM) 管理系統的高優先級儲存桶中。即使前台用戶的應用程式需要更多內存,這些持久的後台進程也不會終止。因此,從前台用戶的角度來看,持久服務會永久地劃分出一定量的內存,並且僅當用戶重新啟動汽車並且所有後台用戶停止時才會返回該內存。

使用者狀態

在使用者啟動之前,使用者處於停止狀態 ( STATE_SHUTDOWN )。如果設定了使用者憑證(例如 PIN),Android 使用者將運行但保持鎖定狀態 ( STATE_RUNNING_LOCKED ),直到有人解鎖該使用者的鎖定畫面。當用戶解鎖時,其憑證加密儲存將被解密,並且該用戶的資料目錄將變得可用。對於典型的使用者切換,一旦解鎖,後台使用者不會停止並保持運作和解鎖狀態 ( STATE_RUNNING_UNLOCKED )。

車庫模式、JobScheduler 和用戶的應用程式更新

汽車應用程式更新資料的建議技術是使用JobScheduler透過Garage 模式(例如,從 Google Play 商店下載應用程式更新)來安排作業在裝置處於空閒狀態時執行。應用程式向 JobScheduler 和 JobSchedulerService 註冊作業後,作業將在可能的情況下執行。

CarService 向 JobSchedulerService 發送訊號,以觸發設定為在汽車設備空閒時透過車庫模式運行的作業。為了讓 JobSchedulerService 為後台使用者執行作業,該使用者必須處於狀態STATE_RUNNING_UNLOCKED 。排隊到 JobSchedulerService 中的作業將會持久化並在整個電源週期內存活。

如果使用者在電源循環後從未解鎖,則 JobScheduler 無法為特定使用者執行作業。但是,一旦解鎖,且使用者仍處於STATE_RUNNING_UNLOCKED狀態,則可以執行該使用者的作業。