前台和后台用户系统处理

在移动 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状态,则可以运行该用户的作业。