Xử lý hệ thống người dùng nền trước và nền sau

Trong Android dành cho thiết bị di động, việc hỗ trợ nhiều Người dùng cho phép Người dùng chạy ở chế độ nền (khi Người dùng khác đang hoạt động) và ở nền trước (còn được gọi là Người dùng hiện tại). Để bảo tồn tài nguyên khi thích hợp, hệ thống sẽ quản lý việc tắt người dùng. Một người dùng tiền cảnh luôn được yêu cầu .

Bắt đầu từ Android 10, Android Automotive có cấu hình mặc định là chỉ cho phép tối đa ba Người dùng chạy cùng một lúc ( config_multiuserMaxRunningUsers ). Do đó, ngoài Người dùng hệ thống không đầu (Người dùng 0), chỉ có thể định cấu hình một Người dùng nền trước và một Người dùng nền.

  • Trong các trường hợp điển hình, Người dùng hiện tại chạy ở nền trước và người dùng hệ thống không có giao diện người dùng (Người dùng 0) chạy ở chế độ nền. Khi Người dùng được chuyển xuống nền, Người dùng sẽ bị dừng nhưng không bị khóa. Khi đạt đến số lượng Người dùng tối đa, Người dùng nền ít được sử dụng gần đây nhất sẽ bị dừng và khóa ( config_multiuserDelayUserDataLocking ).
  • Nền đã dừng và mở khóa Người dùng được khởi động lại trong Chế độ Garage .

Người dùng khách là tạm thời và chỉ có thể chạy ở nền trước. Khi một người chuyển khỏi chế độ Khách, Người dùng Khách sẽ bị dừng và không thể chạy ở chế độ nền.

Quá trình người dùng nền

Khi Người dùng chuyển từ nền trước sang nền (và ngược lại), tất cả các hoạt động và dịch vụ trên nền trước cho Người dùng đó sẽ bị chấm dứt. Điều này dẫn đến việc ngừng tất cả các dịch vụ liên quan đến các dịch vụ đó. Tuy nhiên, một số dọn dẹp vẫn còn. Các dịch vụ liên tục từ các ứng dụng hệ thống OEM và bên thứ nhất tiếp tục chạy miễn là Người dùng (hiện đang chạy ở chế độ nền) không bị dừng.

Các dịch vụ liên tục gặp nhiều vấn đề hơn vì các dịch vụ này được chứa trong nhóm có mức độ ưu tiên cao trong hệ thống quản lý Hết bộ nhớ (OOM) của Android. Ngay cả khi các ứng dụng dành cho Người dùng trên nền trước yêu cầu nhiều bộ nhớ hơn thì các quá trình nền liên tục đó vẫn không bị chấm dứt. Do đó, theo quan điểm của Người dùng ở nền trước, Dịch vụ liên tục sẽ vĩnh viễn loại bỏ một lượng bộ nhớ và bộ nhớ đó chỉ được trả lại khi một người khởi động lại ô tô và mọi Người dùng ở nền đều bị dừng.

Trạng thái người dùng

Người dùng ở trạng thái dừng ( STATE_SHUTDOWN ) cho đến khi Người dùng bắt đầu. Nếu thông tin xác thực của Người dùng (chẳng hạn như mã PIN) được đặt thì Người dùng Android sẽ chạy nhưng vẫn bị khóa ( STATE_RUNNING_LOCKED ) cho đến khi một người mở khóa màn hình khóa cho Người dùng đó. Khi Người dùng được mở khóa, bộ nhớ mã hóa thông tin xác thực của họ sẽ được giải mã và các thư mục dữ liệu cho Người dùng đó sẽ khả dụng. Đối với chuyển đổi Người dùng thông thường, Người dùng nền không bị dừng và vẫn chạy và được mở khóa ( STATE_RUNNING_UNLOCKED ), sau khi được mở khóa.

Chế độ Garage, Lập lịch công việc và cập nhật ứng dụng cho người dùng

Kỹ thuật được đề xuất cho các ứng dụng Ô tô để cập nhật dữ liệu là sử dụng JobScheduler để lên lịch chạy công việc khi thiết bị ở trạng thái không hoạt động, thông qua Chế độ Garage (ví dụ: tải xuống các bản cập nhật ứng dụng từ Cửa hàng Google Play). Sau khi ứng dụng đăng ký công việc với JobScheduler và JobSchedulerService, công việc sẽ được chạy khi có thể.

CarService gửi tín hiệu đến JobSchedulerService để kích hoạt các công việc được thiết lập để chạy khi thiết bị Ô tô không hoạt động thông qua Chế độ Garage. Để JobSchedulerService chạy công việc cho Người dùng nền, Người dùng đó phải ở trạng thái STATE_RUNNING_UNLOCKED . Các công việc được xếp hàng vào JobSchedulerService sẽ được duy trì và tồn tại qua các chu kỳ nguồn.

JobScheduler không thể chạy công việc cho một Người dùng cụ thể nếu Người dùng đó chưa bao giờ được mở khóa sau một chu kỳ cấp nguồn. Tuy nhiên, sau khi được mở khóa và nếu Người dùng vẫn ở STATE_RUNNING_UNLOCKED , công việc cho Người dùng có thể được thực hiện.