Ç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*
:AlarmManager
tarafından oluşturuldu.AudioIn
,AudioMix
: Medya API'leri tarafından oluşturulur.GOOGLE_C2DM
: Uygulamaya Firebase Cloud Message (FCM) yayını dağıtırken edinilir.*job*/<package_name>/<package_and_job_name>
: JobScheduler işleri tarafından oluşturulur.*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
: WorkManager çalışanları tarafından oluşturulur.NetworkLocationLocator
,FusedLocation
,*location*
: Konum API'leri tarafından oluşturulur._UNKNOWN
: Uyanık kalma kilidi adında kimliği tanımlayabilecek bilgiler (PII) kullanılıyorsa hata ayıklama araçları tarafından gösterilir.
*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.