Chọn API phù hợp để giữ cho thiết bị luôn thức

Khi người dùng không sử dụng thiết bị chạy Android, thiết bị sẽ nhanh chóng chuyển sang trạng thái tạm ngưng để tránh hao pin. Tuy nhiên, có những lúc ứng dụng cần ngăn CPU chuyển sang trạng thái tạm ngưng. Trong một số trường hợp, ứng dụng có thể cần bật màn hình trong khi hoạt động. Trong các trường hợp khác, ứng dụng không cần bật màn hình nhưng vẫn cần CPU hoạt động.

Phương pháp bạn áp dụng sẽ tuỳ thuộc vào nhu cầu của ứng dụng. Tuy nhiên, nguyên tắc chung là bạn nên sử dụng phương pháp đơn giản nhất có thể để giảm thiểu tác động của ứng dụng đến tài nguyên hệ thống. Tài liệu này giúp bạn chọn công nghệ Android phù hợp với trường hợp của mình.

Chọn công nghệ phù hợp

Lựa chọn tốt nhất để giữ cho thiết bị ở trạng thái hoạt động phụ thuộc vào nhu cầu của ứng dụng. Phần này giúp bạn chọn phương pháp phù hợp.

Sơ đồ quy trình tóm tắt cách chọn phương pháp phù hợp để giữ cho thiết bị ở trạng thái bật. Nội dung của sơ đồ quy trình được mở rộng trong văn bản sau.

  • Ứng dụng của bạn có cần bật màn hình không?
    • Nếu câu trả lời là , hãy xem phần Duy trì màn hình ở trạng thái bật. Có thể có một API chuyên dụng thực hiện những gì bạn cần; ví dụ: nếu đang triển khai giao diện người dùng cuộc gọi điện thoại, bạn có thể sử dụng khung viễn thông Android. Khung này sẽ giữ màn hình luôn bật khi cần. Nếu không có API chuyên dụng cho trường hợp của bạn, thì bạn có thể dùng API keepScreenOn.
  • Ứng dụng của bạn có đang chạy một dịch vụ trên nền trước và bạn cần giữ cho thiết bị ở trạng thái thức khi màn hình tắt trong khi dịch vụ đang chạy không?
    • Nếu Không, bạn không cần giữ thiết bị ở chế độ bật. Nếu người dùng đang tương tác với ứng dụng, thì thiết bị sẽ vẫn hoạt động. Nếu người dùng không tương tác với ứng dụng của bạn và bạn không chạy dịch vụ trên nền trước, thì bạn nên cho phép thiết bị chuyển sang chế độ tạm ngưng khi cần. Nếu bạn chỉ cần đảm bảo một số công việc được thực hiện trong khi người dùng không sử dụng ứng dụng, hãy xem tài liệu về các tác vụ trong nền để tìm ra lựa chọn phù hợp nhất.
    • Nếu câu trả lời là , trước tiên, hãy xác nhận rằng bạn thực sự cần sử dụng một dịch vụ trên nền trước. Tuỳ thuộc vào tình huống của bạn, có thể có một số API chuyên dụng mà bạn có thể dùng để đáp ứng nhu cầu của mình thay vì dùng dịch vụ trên nền trước. Bạn có thể tìm thấy thông tin về những này trong tài liệu về Dịch vụ trên nền trước. Ví dụ: nếu cần theo dõi vị trí của người dùng, bạn có thể sử dụng API hàng rào địa lý thay vì dịch vụ trên nền trước location.
  • Liệu trải nghiệm người dùng có bị ảnh hưởng nếu thiết bị tạm ngưng trong khi dịch vụ trên nền trước đang chạy và màn hình thiết bị tắt không? (Ví dụ: nếu bạn đang dùng một dịch vụ trên nền trước để cập nhật thông báo, thì đó sẽ không phải là trải nghiệm người dùng kém nếu thiết bị bị tạm ngưng.)
    • Nếu Không, đừng sử dụng khoá chế độ thức. Hành động này sẽ tự động tiếp tục khi người dùng tương tác với thiết bị, thao tác này sẽ đưa thiết bị ra khỏi trạng thái tạm ngưng.
    • Nếu , bạn có thể cần sử dụng khoá chế độ thức. Tuy nhiên, bạn vẫn nên kiểm tra để xem liệu bạn đã sử dụng một API hay thực hiện một hành động khai báo khoá đánh thức thay cho bạn hay chưa, như đã thảo luận trong phần Các hành động giữ cho thiết bị ở trạng thái thức.

Các thao tác giữ thiết bị ở trạng thái bật

Nếu ứng dụng của bạn đang thực hiện bất kỳ thao tác nào sau đây, thì bạn không cần tự thiết lập khoá đánh thức. Tất cả các thao tác và API sau đây đều giúp thiết bị ở trạng thái hoạt động.

  • Nếu bạn đang phát âm thanh, hệ thống âm thanh sẽ thiết lập và quản lý khoá đánh thức cho bạn; bạn không cần tự làm việc này.
  • Nếu bạn đang sử dụng các API hoặc thư viện lập lịch tác vụ như WorkManager, JobScheduler hoặc DownloadManager, thì hệ thống hoặc thư viện sẽ có được một khoá đánh thức được phân bổ cho ứng dụng của bạn.
  • Nếu đang sử dụng Media3 ExoPlayer, bạn có thể dùng ExoPlayer.setWakeMode() để trình phát thiết lập khoá đánh thức cho bạn.
  • Một số cảm biến trên thiết bị là cảm biến đánh thức; bạn có thể dùng SensorManager để các cảm biến đó đánh thức thiết bị khi có dữ liệu cần báo cáo. Để kiểm tra xem một cảm biến có phải là cảm biến đánh thức hay không, hãy gọi Sensor.isWakeUpSensor.
  • Nếu bạn lên lịch cho chuông báo, thiết bị sẽ bật khi chuông báo đổ chuông, ngay cả khi ứng dụng của bạn không chạy.

Xem thêm