0

Kể từ khi ra mắt Android 6.0 (API level 21), Anroid đã chính thức giới thiệu 2 tính năng tiết kiệm năng lượng có thể kéo dài thời lượng sử dụng pin của người dùng thông qua việc quản lí hoạt động của ứng dụng khi thiết bị không được kết nối với nguồn sạc. Nói một các ngắn ngọn, Doze sẽ giảm tiêu hao pin bằng cách hạn chế những tác vụ CPU nền và truy cập mạng khi thiết bị đang ở trong trạng thái không sử dụng trong một khoảng thời gian.

Understanding Doze

Nếu một người dùng để thiết bị của mình ở trạng thái không cắm nguồn, bất động với màn hình tắt đi trong một khoảng thời gian, thiết bị sẽ đi vào trạng thái Doze, khi đó, hệ thống sẽ hạn chế các ứng dụng cố gắng truy cập vào mạng và thực hiện những tác vụ tiêu tốn CPU, đồng thời cũng hạn chế một số tác vụ ngầm của ứng dụng như đồng bộ hay lập lịch ...

Một cách định kì, hệ thống sẽ tự thoát ra khỏi chế độ Mode trong một khoảng thời gian ngắn để cho phép ứng đụng được thực hiện những tác vụ đang bị hoãn lại của mình, khoảng thời gian này được gọi là maintenance window, trong khoảng thời gian này, app sẽ được cấp phép để làm mọi thứ như bình thường, kể cả quyền truy cập mạng.

https://images.viblo.asia/a7a5fa97-e28c-4ed1-af8a-cf701db59fe2.png

Kết thục mỗi quá trình maintenance window, hệ thống lại tiếp tục trở về trạng thái Doze, và càng ngày, chu kì của mỗi quá trình này là dài hơn, tức là khoảng thời gian xuất hiện của maintenance window lại càng ít đi theo thời gian, mục đích là để giảm mức tiêu thụ pin trong trường hợp người dùng để thiết bị của mình quá lâu mà không cắm nguồn.

Những vấn đề của ứng dụng khi vào Doze

Vậy cụ thể khi đi vào chế độ Doze, ứng dụng sẽ đối mặt với những thách thức gì?

  1. Quyền truy cập mạng bị hạn chế.

  2. Hệ thống sẽ bỏ qua *wakes lock *

  3. AlarmManager alarm thông thường ( bao gồm cả setExact() và setWindow()) sẽ được hoãn lại và được thi hành khi hệ thống xuất hiện một maintenance window

  4. Không cho phép tìm kiếm Wi-Fi

  5. Không cho phép chạy những tác vụ AbstractThreadedSyncAdapter

  6. Không có phép chạy những tác vụ JobScheduler

Làm sao một ứng dụng có thể thích nghi được?

Có một sự khác nhau trong tác động của Doze đối với ứng dụng, vì nó dựa trên khả năng tiêu tốn pin của từng dịch vụ mà ứng dụng đang sử dụng. Đa số những thành phần thông thường của một ứng dụng có thể vượt qua được Doze mà không cần bất kì một sử thay đổi nào. Tuy nhiên, vào một số trường hợp, bạn phải cải tiến cách ứng dụng quản lí network, alarms, jobs, and syncs để ứng dụng có thể thực hiện đồng thời nhiều tác vụ trong khoảng thời gian maintenance window

Một điểm thay đổi rõ ràng hơn đó là khả năng ảnh hưởng đến AlarmManager alarms và timers manage, bởi vì alarm trong Android 5.1 (API level 22) và thấp hơn, sẽ không hoạt động khi hệ thống đang ở chế độ Doze. May thay, để giúp ứng dụng có thể lập lịch, Android 6.0 (API level 23) đã giới thiệu 2 phương thức mới, setAndAllowWhileIdle() và setExactAndAllowWhileIdle(), với 2 phương thức này, chúng ta có thể bắn ra một alarm ngay cả khi ứng dụng đang ở chế độ Doze.

Việc Doze hạn chế quyền truy cập mạng đương nhiên cũng sẽ ảnh hưởng đến ứng dụng của bạn, đặc biệt là những app có sử dụng những thông điệp real-time như notifications, trong trường hợp này, Google khuyến khích bạn sử dụng Firebase Cloud Messaging (FCM)

Để xác thực những ảnh hưởng mà Doze có thể gây ra, chúng ra có thể giả lập đưa ứng dụng của mình vào vòng đời Doze bằng lệnh rất dễ dàng, bằng việc quan sát và xem log, chúng ta có thế phán định những ảnh hưởng của chế độ này đối với app, qua đó có thể đưa ra những phương án khắc phục, để rõ ràng hơn, cách bạn có thể tham khảo Testing with Doze and App Standby

***Tạm kết

Hệ điều hành Android đang ngày càng phát triển và nâng cấp, sau một lần ra mắt một phiên bản mới thì cũng có rất nhiều sự thay đổi, bắt buộc ứng dụng của chúng ta cũng phải thích nghi theo. Hy vọng sau bài viết này, bạn sẽ hiểu thêm một chút về Doze cũng nhưng cách để đưa ứng dụng của mình vượt quá Doze mode một cách dễ dàng. Have fun !

Have problems with Android? Ask on Viblo »

Comments

Loading comments...
0