前景和背景使用者系統處理

在 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 下載應用程式更新)。應用程式使用 JobSchedulerJobSchedulerService 註冊工作後,系統會在可行時執行工作。

CarService 會傳送訊號至 JobSchedulerService,藉此觸發在汽車裝置處於停車模式時閒置的設定工作。JobSchedulerService 必須處於 STATE_RUNNING_UNLOCKED 狀態,才能為背景使用者執行作業。排入 JobSchedulerService 的工作會保留,並在電源週期中持續存在。

如果使用者在電源週期後從未解鎖,JobScheduler 就無法為該使用者執行工作。不過,如果使用者解鎖,且仍處於 STATE_RUNNING_UNLOCKED 中,則可執行使用者的工作。