Trong Android dành cho thiết bị di động, tính năng hỗ trợ nhiều người dùng cho phép người dùng chạy ở chế độ nền (khi một người dùng khác đang hoạt động) và ở chế độ nền trước (còn gọi là người dùng hiện tại). Để tiết kiệm tài nguyên khi thích hợp, hệ thống sẽ quản lý việc tắt máy của người dùng. Luôn phải có một người dùng trên nền trước.
Kể từ Android 10, Android Automotive có cấu hình mặc định cho phép chỉ tối đa 3 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 có giao diện người dùng (Người dùng 0), bạn chỉ có thể định cấu hình một người dùng trên nền trước và một người dùng trên nền sau.
- Trong các trường hợp thông thường, 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 sang chế độ nền, người dùng sẽ bị dừng nhưng không bị khoá. Khi đạt đến số lượng người dùng tối đa, người dùng ở chế độ nền được sử dụng ít nhất gần đây sẽ bị dừng và khoá (
config_multiuserDelayUserDataLocking
). - Người dùng ở chế độ nền đã dừng và mở khoá sẽ được khởi động lại trong Chế độ gara.
Người dùng khách là tạm thời và chỉ có thể chạy ở chế độ nền trước. Khi người dùng chuyển sang chế độ không phải khách, người dùng khách sẽ bị dừng và không thể chạy ở chế độ nền.
Quy trình người dùng ở chế độ nền
Khi người dùng chuyển từ chế độ nền trước sang chế độ nền (và ngược lại), tất cả hoạt động và dịch vụ trên nền trước của người dùng đó sẽ bị chấm dứt. Thao tác này sẽ dừng tất cả các dịch vụ được liên kết từ các dịch vụ đó. Tuy nhiên, vẫn còn một số việc cần làm. Dịch vụ liên tục từ các ứng dụng hệ thống của bên thứ nhất và OEM tiếp tục chạy miễn là người dùng (hiện ở chế độ nền) không bị dừng.
Các dịch vụ liên tục gây ra nhiều vấn đề hơn vì các dịch vụ này nằm trong một bộ chứa có mức độ ưu tiên cao trong hệ thống quản lý tình trạng 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 cần nhiều bộ nhớ hơn, các quy trình nền liên tục đó sẽ không bị chấm dứt. Do đó, theo quan điểm của người dùng trên nền trước, các dịch vụ liên tục sẽ phân bổ một lượng bộ nhớ vĩnh viễn và bộ nhớ đó chỉ được trả về khi người dùng khởi động lại ô tô và mọi người dùng trên nền sau đều bị dừng.
Trạng thái của người dùng
Người dùng ở trạng thái dừng (STATE_SHUTDOWN
) cho đến khi người dùng được khởi động. Nếu bạn đặt thông tin xác thực người dùng (chẳng hạn như mã PIN), người dùng Android sẽ chạy nhưng vẫn bị khoá (STATE_RUNNING_LOCKED
) cho đến khi người dùng đó mở khoá màn hình khoá. Khi người dùng mở khoá, bộ nhớ được mã hoá 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ẽ có sẵn. Đối với trường hợp chuyển đổi người dùng thông thường, người dùng ở chế độ nền sẽ không bị dừng và vẫn chạy và mở khoá (STATE_RUNNING_UNLOCKED
) sau khi mở khoá.
Chế độ gara, JobScheduler và bản cập nhật ứng dụng cho người dùng
Kỹ thuật được đề xuất để 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 rảnh, thông qua Chế độ gara (ví dụ: tải bản cập nhật ứng dụng xuống từ Google Play). Sau khi ứng dụng đăng ký công việc bằng JobScheduler
và JobSchedulerService
, công việc sẽ 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 đặt để chạy khi thiết bị Automotive rảnh thông qua Chế độ gara. Để JobSchedulerService
chạy công việc cho người dùng ở chế độ nền, người dùng đó phải ở trạng thái STATE_RUNNING_UNLOCKED
. Các công việc được đưa vào hàng đợi 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ở khoá sau một chu kỳ nguồn. Tuy nhiên, khi người dùng được mở khoá và nếu người dùng vẫn ở trong STATE_RUNNING_UNLOCKED
, thì các công việc cho người dùng có thể chạy.