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

Çeşitli kitaplıklar ve sistem API'leri, uygulamanıza atanabilir uyanma kilitleri edinebilir. Bu durum, uygulamanızda soruna neden olabilecek bir uyanma kilidini belirlemeyi zorlaştırabilir. Bir API'yi kötüye kullanırsanız uyanma kilidi API'lerini doğrudan çağırmıyor olsanız bile uygulamanızın uyanma kilidini çok uzun süre tutmasına neden olabilirsiniz.

Bu dokümanda, uyanıklık kilidi hata ayıklama araçlarını kullandığınızda görebileceğiniz bazı yaygın uyanık kalma kilidi adları listelenmiştir. Bu adları Android vitals'daki bir raporda da görebilirsiniz. Bazı durumlarda, uyanma kilidi bir kitaplık veya sistem API'si tarafından oluşturulmuş olabilir. Diğer durumlarda, aracın uygulamada kullandığınız uyanma kilidi adını gizlemesinin bir nedeni vardır. Hatalı çalışan uyanma kilitlerini tespit etmek 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 belgede uyanma kilidi adını arayabilirsiniz.

Bu dokümanda aşağıdaki uyanma kilidi adları ele alınmaktadır. Her durumda, uyanma kilidi başka bir kitaplık veya API tarafından oluşturulabilir ancak kilit, ilgili API'yi çağıran uygulamayla ilişkilendirilir.

*alarm*

Bu uyanma kilidi AlarmManager tarafından alınır ve arayan uygulamaya ilişkilendirilir. AlarmManager, alarm çaldığında uyanma kilidini alır ve alarm yayınının onReceive() yöntemi yürütülmeyi tamamladığında kilidi bırakır.

Öneri

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

  • Alarm planlama sıklığını optimize etmek için AlarmManager simgesini kullanın.
  • RTC_WAKEUP alarmlarını (cihazı uyandıran) yalnızca gerektiğinde kullanın.
  • Alarm kullanımını en aza indirin ve onReceive() yönteminde uzun süreli çalışmalar yapmaktan kaçının.

AudioIn, AudioMix vb.

Adları Audio ile başlayan çeşitli uyanma kilitleri, ses kaydı yapılırken veya ses çalarken medya API'leri tarafından edinilir. Uyandırma kilitleri, arayan uygulamayla ilişkilendirilir.

AudioIn, kamera modunda AudioRecord kaydı sırasında mikrofon etkinken alınır. AudioMix, cihazda AudioTrack oynatma sırasında elde edilir. Diğer medya API'leri, Audio ile başlayan başka adlara sahip uyanma kilitleri edinebilir.

Öneri

Aşağıdaki uygulamaları öneririz:

  • Uyanık kalma kilidi adları Audio ile başlamamalıdır.
  • Medya API'lerini kullanıyorsanız doğrudan uyanma kilitleri edinmeniz gerekmez. Gerekli uyanma kilitlerini edinmek için API'lerden yararlanabilirsiniz.
  • Medya API'lerini kullanırken artık ihtiyacınız olmadığında medya oturumunu sonlandırın.

GOOGLE_C2DM

Bu uyanma kilidi, uygulamaya Firebase Cloud Message (FCM) yayını yapılırken GCM tarafından alınır. FCM yayını onMessageReceived() yönteminin yürütülmesi tamamlandığında uyanma kilidi bırakılır.

Öneri

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

  • FCM yayınlama sıklığını optimize edin.
  • İletinin gerçekten hemen teslim edilmesi gerekmediği sürece yüksek öncelikli FCM kullanmayın.
  • onMessageReceived() yönteminin en kısa sürede tamamlanmasını sağlayın. Daha fazla bilgi için Firebase kılavuzuna göz atın.

*job*/<package_name>/<package_and_job_name>

Bu uyandırıcı kilitler, arka planda görevler yürütülürken JobScheduler işleri tarafından kullanılır. Uyandırma kilitleri, çalışanları oluşturan uygulamaya bağlanır.

"<package_name>", <package name> metni değil, uygulamanızın paketinin adıdır. Benzer şekilde, "<package_and_job_name>", paket adının ardından iş adı gelir. *job*, yıldız işaretleri içeren *job* karakter dizisidir. Yıldız işaretleri joker karakter olarak kullanılmaz. Aşağıda bu tür bir uyanma kilidi adına bir örnek verilmiştir:

*job*/com.example.app/com.example.app.example.path.ExampleJobService

Öneri

JobScheduler görevlerini 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.

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

Bu uyanık kalma kilitleri, arka planda görevler yürütülürken WorkManager çalışanları tarafından kullanılır. Uyandırma kilitleri, çalışanları oluşturan uygulamaya bağlanır.

"<package_name>", <package name> metni değil, uygulamanızın paketinin adıdır. *job*, yıldız işaretleri içeren *job* karakter dizisidir. Yıldız işaretleri joker karakter olarak kullanılmaz.

Ö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.

NetworkLocationLocator, FusedLocation, *location*

Bu uyanma kilidi adları, cihaz konumunu almak ve iletmek için LocationManager ve FusedLocationProviderClient tarafından kullanılır. Uyandırma kilitleri, bu API'leri çağıran uygulamayla ilişkilendirilir.

Öneri

Konum kullanımını optimize edin. Örneğin, zaman aşımı ayarlayabilir, konum isteklerini gruplandırabilir veya pasif konum güncellemeleri kullanabilirsiniz.

_UNKNOWN

Hata ayıklama araçları, bir uyanma kilidi adının kimliği tanımlayabilecek bilgiler (PII) içerdiğini düşünürse gerçek uyanma kilidi adını göstermez. Bunun yerine, uyanma kilidini _UNKNOWN olarak etiketler. Örneğin, uyanma kilidi 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 kullanmaktan kaçının. Uygulamanızla ilişkili _UNKNOWN adlı bir uyanma kilidi bulursanız hangi uyanma kilidi olduğunu belirlemeyi deneyin ve kilide farklı bir ad verin.