Để cải thiện thời lượng pin của thiết bị, Android có thể ảnh hưởng đến trạng thái thiết bị bằng cách giám sát việc sử dụng và trạng thái thức của thiết bị. Nền tảng có thể chuyển sang trạng thái ngủ để tạm dừng các hoạt động chạy trong khi thiết bị không được sử dụng.
Giới thiệu về chế độ Nghỉ
Chế độ Ngủ giúp kéo dài thời lượng pin bằng cách trì hoãn hoạt động mạng và CPU ở chế độ nền của ứng dụng khi thiết bị không được sử dụng trong thời gian dài.
Các thiết bị ở trạng thái rảnh trong chế độ Nghỉ định kỳ sẽ chuyển sang giai đoạn bảo trì, trong đó các ứng dụng có thể hoàn tất công việc đang chờ xử lý (đồng bộ hoá, công việc, v.v.). Sau đó, chế độ Ngủ sẽ tiếp tục ngủ trong một khoảng thời gian dài hơn, tiếp theo là một khoảng thời gian bảo trì khác. Nền tảng tiếp tục trình tự ngủ/bảo trì của chế độ Ngủ, tăng thời lượng ở trạng thái rảnh mỗi lần cho đến khi đạt đến thời gian ngủ tối đa là vài giờ. Tại mọi thời điểm, thiết bị ở chế độ Nghỉ vẫn nhận biết được chuyển động và sẽ ngay lập tức thoát khỏi chế độ Nghỉ nếu phát hiện thấy chuyển động.
Android 7.0 trở lên mở rộng chế độ Ngủ để kích hoạt một bộ tối ưu hoá nhẹ hơn mỗi khi người dùng tắt màn hình thiết bị, ngay cả khi người dùng tiếp tục di chuyển, giúp kéo dài thời lượng pin.
Các dịch vụ hệ thống quan trọng thường do nhà sản xuất thiết bị thiết lập để được miễn Chế độ nghỉ. Người dùng cũng có thể miễn một số ứng dụng khỏi chế độ Ngủ bằng trình đơn Cài đặt. Tuy nhiên, việc miễn trừ ứng dụng có thể làm hao pin trên thiết bị. Theo mặc định, chế độ Nghỉ sẽ tắt trong AOSP; để biết thông tin chi tiết về cách bật chế độ Nghỉ, hãy xem phần Tích hợp chế độ Nghỉ.
Yêu cầu về chế độ Nghỉ
Để hỗ trợ chế độ Ngủ, thiết bị phải có dịch vụ nhắn tin qua đám mây, chẳng hạn như Giải pháp gửi thông báo qua đám mây của Firebase (FCM). Các sự kiện kích hoạt bên ngoài, chẳng hạn như tin nhắn trên đám mây, có thể tạm thời đánh thức ứng dụng để thực hiện công việc trong khi thiết bị vẫn ở chế độ Ngủ.
Tính năng hỗ trợ Chế độ nghỉ đầy đủ cũng yêu cầu một máy phát hiện chuyển động đáng kể (SMD) trên thiết bị; tuy nhiên, chế độ Chế độ nghỉ nhẹ trong Android 7.0 trở lên không yêu cầu SMD. Nếu chế độ Nghỉ được bật trên một thiết bị:
- Có SMD, các hoạt động tối ưu hoá chế độ Ngủ hoàn toàn sẽ diễn ra (bao gồm cả các hoạt động tối ưu hoá nhẹ).
- Không có SMD, chỉ có các hoạt động tối ưu hoá chế độ Ngủ nhẹ.
Vòng đời của chế độ Nghỉ
Chế độ Ngủ bắt đầu khi nền tảng phát hiện thiết bị đang ở trạng thái rảnh và kết thúc khi một hoặc nhiều hoạt động đáp ứng tiêu chí thoát xảy ra.
Nền tảng phát hiện thiết bị ở trạng thái rảnh khi:
- Thiết bị cố định (sử dụng SMD).
- Màn hình thiết bị tắt trong một khoảng thời gian.
Chế độ nghỉ không hoạt động khi thiết bị chạy bằng pin được cắm vào bộ sạc.
Trong chế độ Nghỉ
Nền tảng này cố gắng duy trì hệ thống ở trạng thái ngủ, định kỳ tiếp tục các hoạt động bình thường trong khoảng thời gian bảo trì, sau đó đưa thiết bị về trạng thái ngủ trong các khoảng thời gian lặp lại dài hơn. Trong khi ngủ, các hạn chế sau đây sẽ hoạt động:
- Ứng dụng không được phép truy cập mạng.
- Bỏ qua chế độ khoá chế độ thức của ứng dụng.
- Chuông báo bị trì hoãn. Không bao gồm chuông báo đồng hồ và chuông báo được đặt bằng
setAndAllowWhileIdle()
(giới hạn ở mức 1 chuông báo mỗi 15 phút cho mỗi ứng dụng khi ở chế độ Ngủ). Trường hợp miễn trừ này dành cho các ứng dụng (chẳng hạn như Lịch) phải hiển thị thông báo nhắc sự kiện. - Không quét tìm Wi-Fi.
- Các hoạt động đồng bộ hoá
SyncAdapter
và công việcJobScheduler
bị hoãn cho đến khoảng thời gian bảo trì tiếp theo. - Các ứng dụng nhận tin nhắn SMS và MMS sẽ được đưa vào danh sách trắng tạm thời để có thể hoàn tất quá trình xử lý.
Thoát
Nền tảng sẽ đưa thiết bị thoát khỏi Chế độ nghỉ khi phát hiện:
- Hoạt động tương tác của người dùng với thiết bị
- Di chuyển thiết bị
- Màn hình thiết bị bật lên
- Chuông báo AlarmClock sắp tới
Thông báo không khiến thiết bị thoát khỏi Chế độ nghỉ.
Android 7.0 trở lên mở rộng chế độ Ngủ bằng cách bật chế độ ngủ nhẹ khi màn hình tắt, trước khi thiết bị ở trạng thái rảnh.
Hình 1. Chế độ nghỉ cho thiết bị không cố định và cố định.
Thao tác | Nghỉ | Chế độ nghỉ tiết kiệm pin |
---|---|---|
Kích hoạt | Màn hình tắt, dùng pin, đứng yên | Màn hình tắt, đang dùng pin (đã rút phích cắm) |
Thời gian | Tăng dần khoảng thời gian bảo trì | Các khoảng thời gian lặp lại N phút với khung giờ bảo trì |
Quy định hạn chế | Không có quyền truy cập mạng, khoá chế độ thức hoặc quét GPS/Wi-Fi; chuông báo và công việc/đồng bộ hoá bị trì hoãn | Không có quyền truy cập mạng; công việc/hoạt động đồng bộ hoá bị trì hoãn ngoại trừ trong thời gian bảo trì |
Hành vi | Chỉ nhận được thông báo đẩy có mức độ ưu tiên cao | Tất cả tin nhắn theo thời gian thực (tin nhắn tức thì, cuộc gọi, v.v.) đã nhận được; thông báo đẩy có mức độ ưu tiên cao cho phép truy cập tạm thời vào mạng |
Thoát | Chuông báo chuyển động, màn hình bật hoặc đồng hồ báo thức | Màn hình bật |
Tương tác với Chế độ chờ ứng dụng
- Thời gian ở chế độ Nghỉ không được tính vào Chế độ chờ ứng dụng.
- Khi thiết bị ở chế độ Nghỉ, các ứng dụng không hoạt động được phép thực hiện các thao tác bình thường ít nhất một lần mỗi ngày.
Tích hợp tính năng Nghỉ
Khi chế độ Nghỉ được bật, các thiết bị hỗ trợ SENSOR_TYPE_SIGNIFICANT_MOTION
sẽ thực hiện chế độ tối ưu hoá Nghỉ đầy đủ (bao gồm cả chế độ tối ưu hoá nhẹ); các thiết bị không có SMD sẽ chỉ thực hiện chế độ tối ưu hoá Nghỉ nhẹ. Android sẽ tự động chọn các tính năng tối ưu hoá chế độ Ngủ thích hợp và không cần cấu hình của nhà cung cấp.
Cách bật chế độ Ngủ cho thiết bị:
- Xác nhận rằng thiết bị đã cài đặt dịch vụ nhắn tin trên đám mây.
- Trong tệp cấu hình lớp phủ thiết bị
overlay/frameworks/base/core/res/res/values/config.xml
, hãy đặtconfig_enableAutoPowerModes
thànhtrue
: Trong AOSP, tham số này được đặt thành<bool name="config_enableAutoPowerModes">true</bool>
false
(Tắt chế độ Ngủ) theo mặc định.
- Xác nhận rằng các ứng dụng và dịch vụ được tải trước:
- Sử dụng nguyên tắc tối ưu hoá tiết kiệm pin. Để biết thông tin chi tiết, hãy xem bài viết Kiểm thử và tối ưu hoá ứng dụng.
HOẶC
- Được miễn chế độ Nghỉ và Chế độ chờ ứng dụng. Để biết thông tin chi tiết, hãy xem phần Miễn trừ ứng dụng.
- Sử dụng nguyên tắc tối ưu hoá tiết kiệm pin. Để biết thông tin chi tiết, hãy xem bài viết Kiểm thử và tối ưu hoá ứng dụng.
- Xác nhận rằng các dịch vụ cần thiết được miễn chế độ Ngủ.
Mẹo
- Nếu có thể, hãy sử dụng FCM để gửi thông báo xuống.
- Nếu người dùng phải thấy thông báo ngay lập tức, hãy sử dụng thông báo FCM có mức độ ưu tiên cao.
- Cung cấp đủ thông tin trong trọng tải thông báo ban đầu (để tránh truy cập mạng không cần thiết sau đó).
- Đặt chuông báo quan trọng bằng
setAndAllowWhileIdle()
vàsetExactAndAllowWhileIdle()
.
Kiểm thử và tối ưu hoá ứng dụng
Kiểm thử tất cả ứng dụng (đặc biệt là các ứng dụng tải trước) ở chế độ Nghỉ. Để biết thông tin chi tiết, hãy tham khảo phần Kiểm thử bằng chế độ Nghỉ và Chế độ chờ ứng dụng.