Đối với một thiết bị di động, quản lý năng lượng là một trong những nhiệm vụ quan trọng nhất. Android đã phát triển một loạt các cơ chế, từ cấp thấp đến cấp cao, để tối đa hóa thời lượng pin. Nguyên tắc cơ bản là đưa thiết bị vào trạng thái ngủ sâu (deep sleep), nơi CPU và các thành phần khác tiêu thụ rất ít năng lượng, càng nhanh và càng thường xuyên càng tốt.
Trước đó, mình có chia sẻ với anh em chủ đề về việc quản lý RAM trên hệ điều hành Android, anh em có thể xem lại theo link bên dưới. Với mình, Android đã trưởng thành và phát triển ổn định kể từ Android 10, dẫu vậy, các phiên bản Android về sau thì họ tối ưu ngày càng tốt hơn cho các chu trình và các tác vụ tưởng như đã quá quen thuộc với người dùng.
Wakelocks là một cơ chế cho phép một ứng dụng yêu cầu hệ thống giữ cho CPU (Partial Wakelock) hoặc cả CPU và màn hình (Full Wakelock) ở trạng thái "thức", ngay cả khi thiết bị đáng lẽ phải đi vào trạng thái ngủ. Các trường hợp sử dụng hợp lệ bao gồm việc phát nhạc khi màn hình tắt, tải xuống một tệp lớn, hoặc đồng bộ hóa dữ liệu quan trọng.
Tuy nhiên, trong lịch sử của Android, Wakelocks đã bị lạm dụng nghiêm trọng. Nhiều ứng dụng giữ Wakelocks quá lâu hoặc quên không giải phóng chúng sau khi hoàn thành công việc, dẫn đến tình trạng hao pin nghiêm trọng ngay cả khi người dùng không sử dụng điện thoại.
Trước đó, mình có chia sẻ với anh em chủ đề về việc quản lý RAM trên hệ điều hành Android, anh em có thể xem lại theo link bên dưới. Với mình, Android đã trưởng thành và phát triển ổn định kể từ Android 10, dẫu vậy, các phiên bản Android về sau thì họ tối ưu ngày càng tốt hơn cho các chu trình và các tác vụ tưởng như đã quá quen thuộc với người dùng.
Cách mà hệ điều hành Android quản lý RAM: RAM trống không phải lúc nào cũng tốt
Quản lý RAM trên Android là một trong những khía cạnh bị hiểu lầm nhiều nhất. Trái ngược với suy nghĩ thông thường rằng "càng nhiều RAM trống càng tốt", Android hoạt động dựa trên một triết lý hoàn toàn khác: "bộ nhớ trống là bộ nhớ lãng phí"....
tinhte.vn
Trạng thái ngủ và thức: Wakelocks và giới hạn chạy nền
Wakelocks là một cơ chế cho phép một ứng dụng yêu cầu hệ thống giữ cho CPU (Partial Wakelock) hoặc cả CPU và màn hình (Full Wakelock) ở trạng thái "thức", ngay cả khi thiết bị đáng lẽ phải đi vào trạng thái ngủ. Các trường hợp sử dụng hợp lệ bao gồm việc phát nhạc khi màn hình tắt, tải xuống một tệp lớn, hoặc đồng bộ hóa dữ liệu quan trọng.
Tuy nhiên, trong lịch sử của Android, Wakelocks đã bị lạm dụng nghiêm trọng. Nhiều ứng dụng giữ Wakelocks quá lâu hoặc quên không giải phóng chúng sau khi hoàn thành công việc, dẫn đến tình trạng hao pin nghiêm trọng ngay cả khi người dùng không sử dụng điện thoại.
Để đối phó với vấn đề này, các phiên bản Android gần đây, đặc biệt từ Android 8.0, đã áp đặt các giới hạn chạy nền (Background Execution Limits) rất nghiêm ngặt. Hệ thống giờ đây hạn chế mạnh mẽ những gì một ứng dụng có thể làm khi nó không ở foreground. Các dịch vụ nền không còn có thể chạy vô thời hạn. Thay vào đó, các nhà phát triển được khuyến khích sử dụng các API hiện đại như WorkManager. Nó cho phép ứng dụng lên lịch cho các tác vụ nền và hệ thống sẽ tự quyết định thời điểm tốt nhất để thực thi chúng (ví dụ: khi thiết bị đang sạc, có kết nối Wi-Fi) và có thể gộp các tác vụ từ nhiều ứng dụng lại để chạy cùng một lúc, giảm thiểu số lần "đánh thức" thiết bị.
Sự thay đổi này phản ánh một sự chuyển dịch triết lý quan trọng trong cách Android quản lý năng lượng. Ban đầu, mô hình dựa trên sự "cho phép" (permission-based), nơi các ứng dụng có quyền tự do lớn miễn là chúng khai báo quyền cần thiết. Tuy nhiên, thực tế lạm dụng đã buộc Google phải chuyển sang một mô hình "hạn chế và kiểm soát" (restriction-based).
Hệ điều hành giờ đây chủ động can thiệp và áp đặt các quy tắc chung để bảo vệ tài nguyên hệ thống, thay vì tin tưởng vào việc các nhà phát triển sẽ tự tối ưu hóa. WorkManager là ví dụ điển hình cho triết lý mới này: "Hãy nói cho hệ thống biết bạn cần làm gì, hệ thống sẽ quyết định khi nào và làm như thế nào là tốt nhất cho pin".
Doze và App Standby
![[IMG]](https://photo2.tinhte.vn/data/attachment-files/2024/05/8338348_Doze-Mode-In-Android.png)
Được giới thiệu từ Android 6.0 (Marshmallow), Doze và App Standby là những cơ chế tự động, thông minh của hệ thống để tiết kiệm pin khi thiết bị không được sử dụng trong thời gian dài.
Chế độ Doze được kích hoạt khi hệ thống phát hiện thiết bị không được cắm sạc, màn hình đã tắt, và quan trọng nhất là đang đứng yên trong một khoảng thời gian. Khi ở chế độ Doze, hệ thống sẽ trì hoãn hầu hết các hoạt động nền của ứng dụng, bao gồm truy cập mạng, đồng bộ hóa và các tác vụ đã lên lịch.
Định kỳ, hệ thống sẽ thoát khỏi Doze để cho phép các ứng dụng thực hiện các công việc bị dồn lại, sau đó lại tiếp tục ngủ, Google gọi đây là maintenance window. Khoảng thời gian giữa các cửa sổ bảo trì này sẽ ngày càng dài ra, giúp tiết kiệm pin tối đa khi thiết bị không được sử dụng trong thời gian dài (ví dụ: để qua đêm).
Quảng cáo
Từ Android 7.0 (Nougat), một phiên bản Doze "nhẹ" hơn, gọi là Light Doze, đã được giới thiệu. Light Doze được kích hoạt ngay khi màn hình tắt, ngay cả khi thiết bị đang di chuyển (ví dụ: trong túi quần của người dùng). Nó áp đặt các hạn chế ít nghiêm ngặt hơn so với Doze sâu (chủ yếu là hạn chế mạng và tác vụ), nhưng giúp bắt đầu tiết kiệm pin ngay lập tức thay vì phải chờ thiết bị đứng yên.
Cho đến Android 15, Google cải tiến chế độ Doze để tăng thêm thời gian chờ của thiết bị, tiết kiệm pin hơn nữa trong việc để máy ở trong chế độ ngủ. Bình thường một ứng dụng sẽ đi vào chế độ Doze sau một khoảng thời gian nhất định, với Android 15 thì thời gian này sẽ rút ngắn đi 50%, tức là ứng dụng sẽ đi vào chế độ Doze nhanh hơn.
Song song với Doze là App Standby, cơ chế này nhắm vào từng ứng dụng riêng lẻ. Hệ thống sẽ đưa một ứng dụng vào trạng thái App Standby nếu nó xác định rằng người dùng đã không tương tác với ứng dụng đó trong một thời gian dài (không mở, không có thông báo, không chạy dịch vụ foreground). Khi ở trạng thái này, ứng dụng sẽ bị hạn chế truy cập mạng và các tác vụ nền của nó sẽ bị trì hoãn cho đến khi người dùng mở lại ứng dụng hoặc cắm sạc.
Để đảm bảo các thông báo quan trọng vẫn đến được với người dùng, Google khuyến khích sử dụng Firebase Cloud Messaging (FCM). Các tin nhắn FCM có độ ưu tiên cao có thể "đánh thức" tạm thời một ứng dụng khỏi cả chế độ Doze và App Standby để hiển thị thông báo.
Chế độ tiết kiệm pin
![[IMG]](https://photo2.tinhte.vn/data/attachment-files/2021/11/5726091_1.Thong_Bao_Pin_Yeu_Android.jpg)
Dĩ nhiên, chế độ này thì quá đơn giản và dễ hiểu với mọi chiếc smartphone. Người dùng hoàn toàn chủ động trong việc bật/tắt chế độ này để kéo dài thời gian sử dụng. Khi được kích hoạt, chế độ này sẽ áp dụng một loạt các biện pháp "thắt lưng buộc bụng" một cách quyết liệt :
Quảng cáo
- Giảm hiệu năng CPU: Hạn chế xung nhịp của CPU để giảm công suất tiêu thụ điện.
- Hạn chế hoạt động nền: Tạm dừng hầu hết các ứng dụng chạy nền, tắt tự động đồng bộ hóa dữ liệu.
- Tối ưu hóa hiển thị: Giảm độ sáng màn hình, giảm thời gian chờ màn hình và có thể chuyển sang giao diện tối màu để tiết kiệm năng lượng trên màn hình OLED.
- Tắt các tính năng phụ: Vô hiệu hóa các phản hồi rung, các hiệu ứng hình ảnh không cần thiết và có thể hạn chế các dịch vụ định vị (GPS).
Một số nhà sản xuất còn cung cấp chế độ "Siêu tiết kiệm pin", chỉ cho phép một vài ứng dụng cơ bản như gọi điện và nhắn tin hoạt động, biến chiếc smartphone thành một chiếc "điện thoại cơ bản" tạm thời để tối đa hóa thời gian chờ.
Việc quản lý tài nguyên trên Android là một quá trình diễn ra liên tục. Từ nhân Linux cung cấp các công cụ cơ bản, đến các lớp trừu tượng và thuật toán thông minh ở trên, tất cả đều phối hợp nhịp nhàng để thực hiện một mục tiêu duy nhất: cung cấp trải nghiệm người dùng tốt nhất có thể trong giới hạn của phần cứng vật lý và dung lượng pin.
