Xác định khoá chế độ thức do các API khác tạo

Một số thư viện và API hệ thống có thể thu được khoá đánh thức có thể quy cho ứng dụng của bạn. Điều này có thể gây khó khăn cho việc xác định khoá đánh thức trong ứng dụng có thể gây ra vấn đề. Nếu bạn sử dụng sai một API, điều đó có thể khiến ứng dụng của bạn giữ khoá đánh thức quá lâu, ngay cả khi bạn không gọi trực tiếp các API khoá đánh thức.

Tài liệu này liệt kê một số tên khoá chế độ thức phổ biến mà bạn có thể thấy khi sử dụng công cụ gỡ lỗi khoá chế độ thức. Bạn cũng có thể thấy những tên này trong báo cáo của Android vitals. Trong một số trường hợp, khoá đánh thức có thể do một thư viện hoặc API hệ thống tạo. Trong những trường hợp khác, có một lý do khiến công cụ này làm rối tên khoá đánh thức mà bạn dùng trong ứng dụng. Bạn có thể dùng các công cụ gỡ lỗi để xác định các khoá đánh thức hoạt động không đúng cách, sau đó tìm tên khoá đánh thức trong tài liệu này để xác định API nào có thể gây ra vấn đề và cách giải quyết vấn đề đó.

Tài liệu này đề cập đến các trường hợp có thể tạo khoá đánh thức. Trong mỗi trường hợp, mặc dù khoá đánh thức có thể được tạo bởi một thư viện hoặc API khác, nhưng khoá này được gán cho ứng dụng đã gọi API đó.

AlarmManager

AlarmManager thu thập khoá đánh thức và gán các khoá đó cho ứng dụng gọi. AlarmManager thu thập khoá đánh thức khi chuông báo tắt và giải phóng khoá khi phương thức onReceive() của thông báo chuông báo kết thúc thực thi.

Tên khoá chế độ thức

AlarmManager tạo khoá đánh thức có tên là *alarm*. (Dấu hoa thị là một phần của tên khoá đánh thức, không đại diện cho ký tự đại diện.)

Nội dung đề xuất

Bạn nên áp dụng các phương pháp sau để tối ưu hoá hành vi của chuông báo:

  • Sử dụng AlarmManager để tối ưu hoá tần suất đặt lịch báo thức.
  • Chỉ sử dụng chuông báo RTC_WAKEUP (đánh thức thiết bị) khi cần thiết.
  • Giảm thiểu việc sử dụng các chuông báo và tránh thực hiện những công việc kéo dài trong phương thức onReceive().

Âm thanh và nội dung nghe nhìn

Media API có thể nhận được khoá đánh thức khi ghi âm hoặc phát âm thanh. Khoá đánh thức được phân bổ cho ứng dụng gọi.

Tên khoá chế độ thức

Media API thu thập khoá chế độ thức với nhiều tên bắt đầu bằng Audio:

  • AudioBitPerfect: Dùng để phát âm thanh qua USB mà không bị mất dữ liệu.
  • AudioDirectOut: Dùng để phát âm thanh không mất dữ liệu trên TV hoặc thiết bị đặc biệt.
  • AudioDup: Dùng để phát thông báo khi kết nối qua Bluetooth hoặc USB.
  • AudioIn: Được dùng để ghi âm thanh khi ở chế độ máy quay trong khi micrô đang hoạt động.
  • AudioMix: Dùng để phát âm thanh trên một thiết bị thông thường.
  • AudioOffload: Dùng để phát nhạc trong thời gian dài, đối với những ứng dụng hỗ trợ chế độ này.
  • AudioSpatial: Dùng để phát âm thanh đa kênh của phim hoặc nhạc trên các thiết bị hỗ trợ âm thanh không gian.
  • AudioUnknown: Được dùng khi các trường hợp khác không áp dụng.
  • MmapCapture: Dùng để ghi âm thanh có độ trễ thấp.
  • MmapPlayback: Dùng để phát lại có độ trễ thấp, chẳng hạn như để chơi trò chơi hoặc cho các ứng dụng âm thanh chuyên nghiệp.

Nội dung đề xuất

Bạn nên áp dụng các phương pháp sau:

  • Đừng sử dụng tên khoá chế độ thức bắt đầu bằng Audio.
  • Nếu đang sử dụng các API đa phương tiện, bạn không cần trực tiếp lấy khoá đánh thức; bạn có thể dựa vào các API để lấy khoá đánh thức cần thiết cho bạn.
  • Khi sử dụng các API đa phương tiện, hãy kết thúc phiên đa phương tiện khi bạn không cần dùng nữa.

Giải pháp gửi thông báo qua đám mây của Firebase (FCM)

GCM sẽ nhận được một khoá đánh thức trong khi gửi thông báo truyền tin của Giải pháp gửi thông báo qua đám mây của Firebase (FCM) đến ứng dụng. Khoá đánh thức sẽ được giải phóng sau khi phương thức truyền tin của FCM onMessageReceived() thực thi xong.

Tên khoá chế độ thức

GCM có được một khoá chế độ thức có tên là GOOGLE_C2DM.

Nội dung đề xuất

Bạn nên áp dụng các phương pháp sau để tối ưu hoá hành vi của FCM:

  • Tối ưu hoá tần suất gửi FCM.
  • Đừng sử dụng FCM có mức độ ưu tiên cao trừ phi thông báo thực sự cần được gửi ngay lập tức.
  • Hoàn tất phương thức onMessageReceived() càng nhanh càng tốt. Hãy xem hướng dẫn của firebase để biết thêm thông tin.

JobScheduler

Các lệnh JobScheduler sẽ nhận được khoá đánh thức trong khi thực thi các tác vụ ở chế độ nền. Khoá đánh thức được quy cho ứng dụng đã tạo các worker.

Tên khoá chế độ thức

Tên khoá đánh thức mà JobScheduler thu được phụ thuộc vào phiên bản hệ thống Android mà chúng đang chạy và mục đích của công việc.

Các mục được đặt trong dấu ngoặc nhọn là các biến. Ví dụ: "<package_name>" là tên gói của ứng dụng, chứ không phải văn bản theo nghĩa đen <package name>. Tuy nhiên, *job* là chuỗi ký tự *job*, có dấu hoa thị; dấu hoa thị không được dùng làm ký tự đại diện.

Android 15 trở xuống

Các công việc do người dùng khởi tạo sẽ tạo khoá đánh thức có tên theo mẫu sau:

*job*u/@<name_space>@/<package_name>/<classname>

Các công việc khác sử dụng mẫu này:

*job*/@<name_space>@/<package_name>/<classname>
Android 16 trở lên

Các công việc do người dùng khởi tạo sẽ tạo khoá đánh thức có tên theo mẫu sau:

*job*u/@<name_space>@/#<trace_tag>#/<package_name>/<classname>

Các việc làm ưu tiên sử dụng mẫu sau:

*job*e/@<name_space>@/#<trace_tag>#/<package_name>/<classname>

Các công việc thông thường sử dụng mẫu sau:

*job*r/@<name_space>@/#<trace_tag>#/<package_name>/<classname>
Ví dụ

Giả sử có một công việc được đẩy nhanh với không gian tên backup và thẻ theo dõi started. Tên gói là com.example.app và lớp đã tạo công việc là com.backup.BackupFileService.

Trên các thiết bị chạy Android 15 trở xuống, khoá đánh thức sẽ có tên là:

*job*/@backup@/com.example.app/com.backup.BackupFileService

Trên các thiết bị chạy Android 16 trở lên, khoá đánh thức sẽ có tên là:

*job*e/@backup@/#started#/com.example.app/com.backup.BackupFileService

Nội dung đề xuất

Kiểm tra việc sử dụng các tác vụ JobScheduler. Cụ thể, hãy làm theo hướng dẫn của chúng tôi về cách tối ưu hoá mức sử dụng pin cho các API lập lịch tác vụ.

Vị trí

LocationManagerFusedLocationProviderClient sử dụng khoá đánh thức để thu thập và cung cấp thông tin vị trí của thiết bị. Các khoá đánh thức được phân bổ cho ứng dụng đã gọi các API đó.

Tên khoá chế độ thức

Dịch vụ vị trí sử dụng các tên sau:

  • CollectionLib-SigCollector
  • NetworkLocationLocator
  • NetworkLocationScanner
  • NlpCollectorWakeLock
  • NlpWakeLock
  • *location*

Nội dung đề xuất

Tối ưu hoá việc sử dụng vị trí. Ví dụ: đặt thời gian chờ, yêu cầu vị trí theo lô hoặc sử dụng thông báo cập nhật vị trí thụ động.

WorkManager

Các trình thực thi WorkManager thu thập khoá chế độ thức trong khi thực thi các tác vụ ở chế độ nền. Khoá đánh thức được quy cho ứng dụng đã tạo các worker.

Tên khoá chế độ thức

Tên khoá đánh thức mà WorkManager thu được tuỳ thuộc vào phiên bản hệ thống Android mà chúng đang chạy.

Android 15 trở xuống

Các tác vụ WorkManager tạo khoá đánh thức có tên theo mẫu sau:

*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
Android 16 trở lên

Các tác vụ ưu tiên tạo khoá đánh thức có tên theo mẫu sau:

*job*e/#<trace_tag>#/<package_name>/androidx.work.impl.background.systemjob.SystemJobService

Các việc cần làm thường xuyên tuân theo mẫu sau:

*job*r/#<trace_tag>#/<package_name>/androidx.work.impl.background.systemjob.SystemJobService

Theo mặc định, <trace_tag> là tên của worker.

Ví dụ

Giả sử có một worker được tăng tốc có tên là BackupFileWorker. Tên gói là com.example.app.

Trên các thiết bị chạy Android 15 trở xuống, khoá đánh thức sẽ có tên là:

*job*/com.example.app/androidx.work.impl.background.systemjob.SystemJobService

Trên các thiết bị chạy Android 16 trở lên, khoá đánh thức sẽ có tên là:

*job*e/#BackupFileWorker#/com.example.app/androidx.work.impl.background.systemjob.SystemJobService

Nội dung đề xuất

Kiểm tra việc sử dụng các trình thực thi WorkManager. Cụ thể, hãy làm theo hướng dẫn của chúng tôi về cách tối ưu hoá mức sử dụng pin cho các API lập lịch tác vụ.

_UNKNOWN

Nếu các công cụ gỡ lỗi cho rằng tên khoá chế độ thức có chứa thông tin nhận dạng cá nhân (PII), thì các công cụ này sẽ không hiển thị tên khoá chế độ thức thực tế. Thay vào đó, chúng sẽ gắn nhãn khoá chế độ thức là _UNKNOWN. Ví dụ: các công cụ có thể thực hiện việc này nếu tên wake lock chứa địa chỉ email.

Nội dung đề xuất

Làm theo các phương pháp hay nhất về đặt tên cho khoá chế độ thức và tránh sử dụng thông tin nhận dạng cá nhân trong tên khoá chế độ thức. Nếu bạn thấy một khoá đánh thức có tên _UNKNOWN được gán cho ứng dụng của mình, hãy thử xác định khoá đánh thức đó và đặt cho khoá đó một tên khác.