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

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 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 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ó chế độ mặc định cấu hình cho phép tối đa ba người dùng chỉ chạy đồng thời (config_multiuserMaxRunningUsers). Do đó, ngoài giao diện người dùng không có giao diện người dùng người dùng hệ thống (Người dùng 0), chỉ có thể định cấu hình một người dùng ở chế độ nền trước và một người dùng ở chế độ nền.

  • 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 vào chế độ nền, người dùng bị dừng nhưng không bị khoá. Khi mức tối đa đã đáp ứng số lượng người dùng, người dùng nền ít sử dụng nhất gần đây đã dừng và đã khoá (config_multiuserDelayUserDataLocking).
  • Người dùng ở chế độ nền bị dừng và mở khoá được khởi động lại trong khoảng thời gian Chế độ nhà xe.

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 đăng xuất khỏi khách, người dùng khách sẽ bị dừng và không thể chạy trong nền.

Quy trình của người dùng ở chế độ nền

Khi người dùng chuyển từ nền trước sang nền sau (và ngược lại), mọi hoạt động và các dịch vụ trên nền trước cho người dùng đó sẽ bị chấm dứt. Chuyến bay này sẽ dừng tất cả các dịch vụ bị ràng buộc từ các dịch vụ đó. Tuy nhiên, một số hoạt động dọn dẹp vẫn còn. Liên tục các dịch vụ của bên thứ nhất và ứng dụng hệ thống của OEM vẫn tiếp tục chạy, miễn là người dùng (hiện ở chế độ nền) chưa 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 đó, từ giao diện người dùng các dịch vụ liên tục sẽ vĩnh viễn tạo ra một lượng bộ nhớ và bộ nhớ đó chỉ được trả về khi một người khởi động lại ô tô và mọi nền ngừng sử 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 mà các ứng dụng Automotive nên dùng để cập nhật dữ liệu là sử dụng JobScheduler để lên lịch chạy các công việc khi thiết bị ở trạng thái rảnh, thông qua Chế độ nhà để xe (ví dụ: tải xuống bản cập nhật ứng dụng từ Google Play). Sau khi ứng dụng đăng ký công việc với JobSchedulerJobSchedulerService, các 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 đặ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. Đã đưa công việc vào hàng đợi vào JobSchedulerService được duy trì và tồn tại qua các chu kỳ năng lượng.

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 từng được mở khoá sau khi bật/tắt nguồn. Tuy nhiên, khi người dùng mở khoá và nếu người dùng vẫn ở STATE_RUNNING_UNLOCKED, các công việc cho người dùng có thể chạy được.