Ứng dụng Hibernation

Một người dùng Android trung bình cài đặt hơn 50 ứng dụng trên thiết bị của họ (con số này tăng lên khi cấp RAM của thiết bị tăng lên). Tuy nhiên, một số lượng đáng kể các ứng dụng này không được người dùng sử dụng trong một thời gian dài.

Chế độ ngủ đông ứng dụng sẽ ngủ đông các ứng dụng mà người dùng không sử dụng trong vài tháng, tương tự như tự động thu hồi quyền. Thao tác này buộc dừng ứng dụng và đưa ứng dụng vào trạng thái mà chúng tôi tối ưu hóa cho bộ nhớ thay vì hiệu suất. Tự động thu hồi quyền cũng đi kèm với trạng thái này và chúng có chung cài đặt miễn trừ trong Cài đặt . Ứng dụng bị dừng bắt buộc không chạy công việc hoặc cảnh báo ở chế độ nền và không thể gửi thông báo đẩy. Khi người dùng sử dụng lại ứng dụng, ứng dụng sẽ thoát khỏi chế độ ngủ đông và công việc/cảnh báo/thông báo sẽ chạy lại như bình thường. Mọi công việc/cảnh báo/thông báo đã được lên lịch trước khi ứng dụng chuyển sang chế độ ngủ đông cần phải được lên lịch lại.

Các OEM sửa đổi nền tảng có thể xung đột với việc triển khai chế độ ngủ đông của ứng dụng. Ví dụ

  • Việc sửa đổi định nghĩa sử dụng ứng dụng hoặc giới thiệu các cách đánh thức ứng dụng không có trong AOSP có thể làm gián đoạn độ chính xác của chế độ ngủ đông của ứng dụng
  • Cơ chế hạn chế độc quyền của OEM tương tự như chế độ ngủ đông của ứng dụng có thể thực hiện mục đích tương tự. Mặc dù cả hai đều có thể tồn tại nhưng có thể có một số sự chồng chéo.

CDD phác thảo một bộ yêu cầu mới đối với những thay đổi dựa trên việc sử dụng ứng dụng, tương tự như yêu cầu 3.5.1 hiện có. Chế độ ngủ đông của ứng dụng tuân theo các yêu cầu này.

Mã khung tồn tại trong:

Logic chính sách tồn tại trong:

  • repo: nền tảng/gói/mô-đun/Quyền
  • thư mục: PermissionController/src/com/android/permissioncontroller/hibernation

Kiến trúc cấp cao

Dịch vụ hệ thống Ngủ đông ứng dụng tối ưu hóa các ứng dụng ít được sử dụng của người dùng để lưu trữ và ngăn các ứng dụng đó chạy trong nền. Để đạt được những kết quả này, khi cho một ứng dụng ở chế độ ngủ đông, chúng tôi cụ thể:

  • Tự động thu hồi quyền
  • Buộc dừng ứng dụng
  • Xóa các tệp ODEX và VDEX
  • Xóa bộ nhớ đệm ứng dụng

Mục tiêu của chúng tôi là triển khai chế độ ngủ đông như một hành động có thể đảo ngược để ứng dụng vẫn có sẵn cho người dùng thông qua Trình khởi chạy và các nền tảng khác với dữ liệu ứng dụng còn nguyên vẹn. Khi khởi chạy ứng dụng, chúng tôi sẽ khôi phục ứng dụng trở lại từ trạng thái buộc dừng và tiếp tục tạo tệp ODEX và VDEX như bình thường.

Thiết kế theo kế hoạch tập trung vào hai phần chính:

  • xác định khi nào một gói nên ngủ đông
  • tối ưu hóa gói ngủ đông

Dịch vụ hệ thống mới, AppHibernationService và dịch vụ công việc, AppHibernationJobService, trong PermissionController là chất kết dính kiểm soát logic và việc ra quyết định tổng thể.

Việc xác định thời điểm gói nên ngủ đông chủ yếu được cung cấp bởi UsageStatsService và được quản lý bởi AppHibernationJobService trong PermissionController . Logic chính sách này tồn tại trong PermissionController để cho phép chúng tôi cập nhật động qua Mainline. Ngoài ra, chúng tôi dự định thêm tín hiệu mới, mức sử dụng thành phần, để nắm bắt mức độ sử dụng các thành phần của gói (ví dụ: dịch vụ, nhà cung cấp nội dung) dưới dạng chỉ số mới trong UsageStatsService .

Tối ưu hóa một gói là nơi diễn ra tất cả các hoạt động tiết kiệm/tối ưu hóa thực tế. AppHibernationService giao tiếp với các bộ phận khác nhau của hệ thống để dừng gói, xóa dữ liệu bộ nhớ đệm, xóa các tạo phẩm ART, v.v. Việc thu hồi quyền được bắt đầu trực tiếp từ AppHibernationJobService để duy trì chức năng tự động thu hồi trên Android 11 trở xuống.

Kinh nghiệm người dùng

Người dùng được cung cấp cả thông tin và quyền kiểm soát những ứng dụng nào có thể ở chế độ ngủ đông.

Tương tự như tự động thu hồi, người dùng sẽ nhận được thông báo về ứng dụng nào đang ở chế độ ngủ đông và có tùy chọn truy cập Cài đặt trực tiếp từ thông báo để mở ứng dụng và đưa ứng dụng ra khỏi chế độ ngủ đông hoặc xóa ứng dụng không sử dụng nếu cần.

Chúng tôi tiếp tục hỗ trợ mục đích của nhà phát triển là yêu cầu người dùng miễn chế độ ngủ đông thông qua mục đích miễn trừ tự động thu hồi các quyền hiện có.

Khả năng tương thích ngược

Các tính năng dành riêng cho chế độ ngủ đông có sẵn kể từ Android 12. Tính năng này không thể hoạt động trên các phiên bản cũ hơn do không có thành phần nền tảng (chẳng hạn như dịch vụ hệ thống mới). Tính năng tự động thu hồi tiếp tục hoạt động như hiện được triển khai cho các phiên bản hệ điều hành cũ hơn.

Bắt đầu từ Android 12, để đảm bảo khả năng tương thích ngược, nút chuyển đổi chế độ ngủ đông được thêm vào trang của ứng dụng trong phần Ứng dụng và thông báo trong Cài đặt trong khi vẫn giữ nút chuyển đổi tự động thu hồi ban đầu trong menu phụ Quyền . Chuyển đổi này kiểm soát việc miễn trừ tổng thể hệ thống Ngủ đông ứng dụng cho ứng dụng.

Tùy chỉnh

Vì một số hoạt động triển khai là một phần của thành phần hệ thống mô-đun nên các đối tác không được khuyến khích sửa đổi tính năng này. Thay vào đó, các đối tác có thể triển khai các tính năng/chức năng tương tự miễn là họ tuân thủ các yêu cầu của CDD.

Chế độ ngủ đông của ứng dụng phải được đặt mặc định là BẬT đối với tất cả các ứng dụng nhắm mục tiêu Android 11 trở lên. Điều này giống như việc tự động thu hồi quyền. Mặc dù bản thân cài đặt có thể BẬT nhưng việc triển khai chế độ ngủ đông của ứng dụng có thể khác nhau giữa các ứng dụng nhắm mục tiêu Android 11 so với Android 12. Cụ thể hơn, chế độ ngủ đông ứng dụng chỉ hoạt động đối với các ứng dụng nhắm mục tiêu Android 11 trong khi về cơ bản nó chỉ tự động thu hồi đối với các ứng dụng nhắm mục tiêu Android 12.

Ngoài ra, các OEM có thể đang triển khai một tính năng tương tự. Tuy nhiên, những tính năng đó được nhắm mục tiêu vào khoảng thời gian ngắn hơn nhiều để tối ưu hóa pin, có thể dành riêng cho OEM. Mọi tính năng hạn chế ứng dụng tương tự do OEM phát triển đều có thể cùng tồn tại với hệ thống Ngủ đông ứng dụng miễn là chúng đáp ứng các tiêu chí hiện có được xác định trong CDD .

Kiểm tra

Chế độ ngủ đông ứng dụng có CTS và kiểm tra đơn vị để đảm bảo ứng dụng hoạt động chính xác.