Diğer API'ler tarafından oluşturulan uyanma kilitlerini tanımlama

Çeşitli kitaplıklar ve sistem API'leri, uygulamanızla ilişkilendirilebilecek uyandırma kilitleri edinebilir. Bu durum, uygulamanızda soruna neden olabilecek bir uyandırma kilidini tanımlamayı zorlaştırabilir. Bir API'yi yanlış kullanırsanız, uyandırma kilidi API'lerini doğrudan çağırmıyor olsanız bile uygulamanızın uyandırma kilidini çok uzun süre tutmasına neden olabilirsiniz.

Bu belgede, uyandırma kilidi hata ayıklama araçlarını kullanırken görebileceğiniz bazı yaygın uyandırma kilidi adları listelenmektedir. Bu adları Android vitals raporunda da görebilirsiniz. Bazı durumlarda, uyandırma kilidi bir kitaplık veya sistem API'si tarafından oluşturulmuş olabilir. Diğer durumlarda, aracın uygulamada kullandığınız uyandırma kilidi adını karartmasının bir nedeni vardır. Hatalı çalışan uyandırma kilitlerini belirlemek için hata ayıklama araçlarını kullanabilir, ardından hangi API'nin soruna neden olabileceğini ve sorunun nasıl çözüleceğini belirlemek için bu dokümanda uyandırma kilidi adını arayabilirsiniz.

Bu belgede, uyandırma kilitlerinin oluşturulabileceği senaryolar ele alınmaktadır. Her durumda, uyandırma kilidi başka bir kitaplık veya API tarafından oluşturulmuş olsa da kilit, söz konusu API'yi çağıran uygulamaya atfedilir.

AlarmManager

AlarmManager, uyandırma kilitleri edinir ve bunları arayan uygulamayla ilişkilendirir. AlarmManager, alarm çaldığında uyandırma kilidini edinir ve alarm yayınının onReceive() yöntemi yürütmeyi bitirdiğinde kilidi serbest bırakır.

Uyanık kalma kilidi adları

AlarmManager, *alarm* adıyla uyanık kalma kilitleri oluşturur. (Yıldız işaretleri, uyandırma kilidi adının bir parçasıdır ve joker karakterleri temsil etmez.)

Öneri

Alarm davranışını optimize etmek için aşağıdaki uygulamaları öneririz:

  • Alarm planlama sıklığını optimize etmek için AlarmManager seçeneğini kullanın.
  • Yalnızca gerektiğinde RTC_WAKEUP alarmlarını (cihazı uyandıran) kullanın.
  • Alarmları en az şekilde kullanın ve onReceive() yönteminde uzun süren işlerden kaçının.

Ses ve medya

Media API'ler, ses kaydederken veya çalarken uyandırma kilidi alabilir. Uyanık kalma kilitleri, arama uygulamasıyla ilişkilendirilir.

Uyanık kalma kilidi adları

Medya API'leri, Audio ile başlayan çeşitli adlara sahip uyanık kalma kilitleri edinir:

  • AudioBitPerfect: Kayıpsız USB ses oynatma için kullanılır.
  • AudioDirectOut: TV'de veya özel bir cihazda kayıpsız ses oynatma için kullanılır.
  • AudioDup: Bluetooth veya USB ile bağlıyken bildirimlerin oynatılması için kullanılır.
  • AudioIn: Mikrofon etkinken video kamera modunda ses kaydı için kullanılır.
  • AudioMix: Sesin ortak bir cihazda oynatılması için kullanılır.
  • AudioOffload: Bu modu destekleyen uygulamalarda uzun süreli yalnızca müzik çalma için kullanılır.
  • AudioSpatial: Üç boyutlu ses destekleyen cihazlarda çok kanallı film veya müzik sesinin oynatılması için kullanılır.
  • AudioUnknown: Diğer durumlar geçerli olmadığında kullanılır.
  • MmapCapture: Düşük gecikmeli ses yakalama için kullanılır.
  • MmapPlayback: Oyun veya profesyonel ses uygulamaları gibi düşük gecikmeli oynatma için kullanılır.

Öneri

Aşağıdaki uygulamaları öneririz:

  • Audio ile başlayan uyanık kalma kilidi adları kullanmayın.
  • Medya API'lerini kullanıyorsanız doğrudan uyandırma kilitleri edinmeniz gerekmez. Gerekli uyandırma kilitlerini sizin için edinmek üzere API'leri kullanabilirsiniz.
  • Medya API'lerini kullandığınızda, artık ihtiyacınız kalmadığında medya oturumunu sonlandırın.

Firebase Cloud Message (FCM)

GCM, uygulamaya bir Firebase Cloud Message (FCM) yayını gönderirken uyandırma kilidi alır. FCM yayını onMessageReceived() yöntemi yürütmeyi tamamladığında uyandırma kilidi serbest bırakılır.

Uyanık kalma kilidi adları

GCM, GOOGLE_C2DM adında bir uyandırma kilidi edinir.

Öneri

FCM davranışını optimize etmek için aşağıdaki uygulamaları öneririz:

  • FCM teslimat sıklığını optimize edin.
  • İleti gerçekten hemen teslim edilmesi gerekmiyorsa yüksek öncelikli FCM kullanmayın.
  • onMessageReceived() yöntemini mümkün olan en kısa sürede tamamlayın. Daha fazla bilgi için Firebase yönergelerini inceleyin.

JobScheduler

JobScheduler işleri, arka planda görev yürütürken uyanık kalma kilitleri edinir. Uyandırma kilitleri, çalışanları oluşturan uygulamayla ilişkilendirilir.

Uyanık kalma kilidi adları

JobScheduler tarafından alınan uyandırma kilidi adları, Android sisteminin hangi sürümünde çalıştıklarına ve işin amacına bağlıdır.

Açılı ayraçlar içindeki öğeler değişkendir. Örneğin, "<package_name>" uygulamanızın paketinin adıdır, <package name> metni değildir. Ancak *job*, yıldız işaretleriyle birlikte *job* karakter dizisidir. Yıldız işaretleri joker karakter olarak kullanılmaz.

Android 15 ve önceki sürümler

Kullanıcı tarafından başlatılan işler, aşağıdaki kalıba uygun adlara sahip uyandırma kilitleri oluşturur:

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

Bu deseni kullanan diğer işler:

*job*/@<name_space>@/<package_name>/<classname>
Android 16 ve sonraki sürümler

Kullanıcı tarafından başlatılan işler, aşağıdaki kalıba uygun adlara sahip uyandırma kilitleri oluşturur:

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

Yüksek öncelikli işlerde şu desen kullanılır:

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

Normal işlerde şu desen kullanılır:

*job*r/@<name_space>@/#<trace_tag>#/<package_name>/<classname>
Örnek

Ad alanı backup ve izleme etiketi started olan hızlandırılmış bir iş olduğunu varsayalım. Paket adı com.example.app, işi oluşturan sınıf ise com.backup.BackupFileService.

Android 15 veya daha eski sürümleri çalıştıran cihazlarda uyanık tutma kilidi şu şekilde adlandırılır:

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

Android 16 veya sonraki sürümlerin yüklü olduğu cihazlarda uyanık kalma kilidi şu şekilde adlandırılır:

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

Öneri

JobScheduler görevlerinin kullanımını denetleyin. Özellikle görev planlama API'leri için pil kullanımını optimize etme ile ilgili yönergelerimizi uygulayın.

Konum

LocationManager ve FusedLocationProviderClient, cihaz konumunu edinmek ve iletmek için uyandırma kilitlerini kullanır. Uyanık kalma kilitleri, bu API'leri çağıran uygulamayla ilişkilendirilir.

Uyanık kalma kilidi adları

Konum hizmetleri aşağıdaki adları kullanır:

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

Öneri

Konum kullanımını optimize etme Örneğin, zaman aşımları ayarlayın, konum isteklerini gruplandırın veya pasif konum güncellemelerini kullanın.

WorkManager

WorkManager çalışanları, arka planda görev yürütürken uyanık kalma kilitleri alır. Uyandırma kilitleri, çalışanları oluşturan uygulamayla ilişkilendirilir.

Uyanık kalma kilidi adları

WorkManager tarafından edinilen uyanık kalma kilidi adları, Android sisteminin hangi sürümünde çalıştıklarına bağlıdır.

Android 15 ve önceki sürümler

WorkManager görevleri, şu kalıba uygun adlara sahip uyanık kalma kilitleri oluşturur:

*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
Android 16 ve sonraki sürümler

Hızlandırılmış görevler, aşağıdaki kalıba uygun adlara sahip uyandırma kilitleri oluşturur:

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

Normal görevler şu kalıbı izler:

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

Varsayılan olarak, çalışan adı <trace_tag>'dır.

Örnek

BackupFileWorker adlı bir hızlandırılmış çalışan olduğunu varsayalım. Paket adı com.example.app.

Android 15 veya daha eski sürümleri çalıştıran cihazlarda uyanık tutma kilidi şu şekilde adlandırılır:

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

Android 16 veya sonraki sürümlerin yüklü olduğu cihazlarda uyanık kalma kilidi şu şekilde adlandırılır:

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

Öneri

WorkManager çalışanlarını kullanımınızı denetleyin. Özellikle görev planlama API'leri için pil kullanımını optimize etme ile ilgili yönergelerimizi uygulayın.

_UNKNOWN

Hata ayıklama araçları, bir uyandırma kilidi adının kimliği tanımlayabilecek bilgiler (PII) içerdiğini düşünürse gerçek uyandırma kilidi adını göstermez. Bunun yerine, uyandırma kilidini _UNKNOWN olarak etiketlerler. Örneğin, wake lock adı bir e-posta adresi içeriyorsa araçlar bunu yapabilir.

Öneri

Uyanık kalma kilidi adlandırmayla ilgili en iyi uygulamaları takip edin ve uyanık kalma kilidi adında kimliği tanımlayabilecek bilgiler (PII) kullanmaktan kaçının. Uygulamanızla ilişkilendirilmiş _UNKNOWN adlı bir uyanık tutma kilidi bulursanız bu uyanık tutma kilidinin hangisi olduğunu belirlemeye çalışın ve farklı bir ad verin.