Bu belge, uygulamanızdaki uyandırma kilidi kullanım alanlarını belirlemenize ve optimize etmenize yardımcı olur. Ayrıca, bu kullanım alanıyla ilişkili diğer kitaplıklar veya sistem API'leri tarafından edinilen uyandırma kilitleri olup olmadığını vurgular. Bu uyanık kalma kilitleri uygulamanızla ilişkili olduğundan, sorunlu bir uyanık kalma kilidinin kaynağını belirlemek zor olabilir. API'nin yanlış kullanımı, uyandırma kilidi almasanız bile uygulamanızın aşırı uyandırma kilidi kullanımı nedeniyle işaretlenmesine neden olabilir.
Bu belgede, uyandırma kilidi hata ayıklama araçlarını kullanırken veya önemli metrikler raporlarında karşılaşabileceğiniz bazı yaygın uyandırma kilidi adları listelenmektedir. Bu adlar bir kitaplık veya sistem API'sinden kaynaklanabilir ya da karartılmış olabilir. Hatalı çalışan uyanık kalma kilitlerini belirlemek için hata ayıklama araçlarını kullanıp bu dokümanda uyanık kalma kilidi adını arayarak hangi API'nin soruna neden olabileceğini belirleyebilir ve kullanımını optimize etme hakkında öneriler bulabilirsiniz.
Bu belgede, uyandırma kilitleri edinmeyle ilgili yaygın kullanım alanları özetlenmekte, çeşitli API'ler ve kitaplıklar tarafından kullanılan uyandırma kilidi adları ayrıntılı olarak açıklanmakta ve uyandırma kilidi kullanımını optimize etme ve azaltmaya yönelik öneriler ve en iyi uygulamalar sunulmaktadır.
- AlarmManager
- Ses ve medya
- Bluetooth
- Cihaz Sensörleri
- Firebase Cloud Message (FCM)
- JobScheduler
- Konum
- Uzaktan Mesajlaşma
- WorkManager
_UNKNOWN: Uyanık kalma kilidi adı, kimliği tanımlayabilecek bilgiler (PII) kullanıyor gibi görünüyorsa hata ayıklama araçları tarafından gösterilir.
AlarmManager
AlarmManager, uyanık kalma kilitleri edinir ve bunları arayan uygulamayla ilişkilendirir. AlarmManager, alarm çaldığında uyanık kalma kilidini edinir ve alarm duyurusunun 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, uyanık kalma 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:
- Yaklaşık veya kesin zamanlı alarm arasında karar vermek için alarm türünü seçme başlıklı makaleyi inceleyin. Alarmınızın hassas olması gerekmiyorsa sistemin planlama konusunda daha esnek olmasını sağlamak için yaklaşık alarm kullanın. Bu, pil ömrünü iyileştirebilir.
- Sistem tarafından uygulanan alarm kotaları hakkında bilgi sahibi olun ve uygulamanızı bu kotalara uyacak şekilde tasarlayın.
onReceive()yönteminde uzun süren işlemler yapmaktan kaçının ve alarmdan sonra ek işlem yapılması gerekiyorsa çalışanları planlayın.
Ses ve medya
Media API'ler, ses kaydederken veya çalarken uyandırma kilidi alabilir. Uyandırma 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 yalnızca müziklerin uzun süreli olarak oynatılması için kullanılır.AudioSpatial: Üç boyutlu sesi 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:
Audioile başlayan uyanık kalma kilidi adları bildirmeyin.- 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 ve ilişkili ön plan hizmetini sonlandırın.
Bluetooth
Platform Bluetooth API'leri, Bluetooth işlemleri gerçekleşirken genellikle çekirdek uyandırma kilitlerini tutar. Bu durum, uygulamadan kaynaklanmaz.
Öneri
- Bluetooth eşlemesi sırasında manuel uyanık kalma kilidi almamak için Bluetooth cihazları eşlerken ikincil cihaz eşleştirmesini kullanın.
- Arka planda Bluetooth iletişimi nasıl yapılacağını öğrenmek için Arka planda iletişim kurma rehberine bakın.
- Gecikmeli iletişimden etkilenen kullanıcı yoksa
WorkManagerkullanmak genellikle yeterlidir. Manuel uyandırma kilidinin gerekli olduğu düşünülüyorsa uyandırma kilidini yalnızca Bluetooth etkinliği süresince veya etkinlik verilerinin işlenmesi süresince tutun.
Cihaz Sensörleri
Adım sayısı, ivme ölçer veya jiroskop verileri gibi cihaz sensörü verilerini izlemek için çeşitli yöntemler vardır.
Wear OS'te, yükseklik, kalp atış hızı ve kat edilen mesafe gibi cihaz verilerini almak için Wear Sağlık Hizmetleri'ni kullanın.
Veriler diğer uygulamalar tarafından toplanıyorsa verileri düzenli olarak almak için WorkManager ile birlikte Health Connect'i kullanabilirsiniz.
Atılan adım veya gidilen mesafedeki değişimi izleme gibi senaryolarda, verileri düzenli olarak almak için WorkManager ile birlikte mobil cihazlarda Recording API'yi kullanabilirsiniz. Geçmiş adım verilerine (ör. günlük toplam adım sayısı veya son 6 saatteki adım sayısı) erişmek için Health Connect, Android 14 veya sonraki sürümlerin yüklü olduğu cihazlarda cihaz üzerinde adım takibini de destekler.
Bazı durumlarda, SensorManager kullanılarak özel cihaz sensörü izleme gerekebilir. SensorManager, sensör uyandırma sensörü olmadığı sürece uygulama adına uyandırma kilidi almaz. Uyandırma sensörleri, isWakeUpSensor API'si kullanılarak tanımlanabilir.
Öneri
Yüksek örnekleme hızlarında kayıt yapmak için sensörleri kullanmak pilin hızlı tükenmesine neden olabilir. Pilin hızlı tükenmesini ve uyanık kalma kilidi kullanımını azaltmak için öneriler:
- Adım sayısı veya kat edilen mesafeyi izliyorsanız verileri pil tasarrufu sağlayacak şekilde kaydetmek için Recording API'yi kullanın. Android 14 veya daha yeni bir sürümün yüklü olduğu cihazlarda geçmiş cihaz verilerine ve toplam adım sayısına erişmek için Health Connect'i kullanabilirsiniz.
- Wear OS'te pasif sensör izleme için pil kullanımını optimize etmek üzere Wear Sağlık Hizmetleri'ni kullanın.
SensorManagerile bir sensörü kaydederken sensör toplama mantığını kullanmak ve uygulamanın aldığı kesintilerin sayısını azaltmak için 30 saniyeden uzun birmaxReportLatencyUstanımlayın. Cihaz daha sonra kullanıcı etkileşimi, konum alma veya planlanmış bir iş gibi başka bir tetikleyiciyle uyandırıldığında sistem, önbelleğe alınmış sensör verilerini hemen gönderir.- Uygulamanız hem konum hem de sensör verileri gerektiriyorsa etkinlik alma ve işleme işlemlerini senkronize edin. Sensör okumalarını, sistemin konum güncellemeleri için tuttuğu kısa uyanık kalma kilidinde birleştirerek CPU'yu uyanık tutmak için uyanık kalma kilidine ihtiyacınız olmasını önlersiniz. Bu birleştirilmiş verilerin yüklenmesini ve işlenmesini sağlamak için bir çalışan veya kısa süreli uyanık kalma kilidi kullanın.
Firebase Cloud Message (FCM)
Uygulamaya Firebase Cloud Message (FCM) yayını gönderilirken uyanık kalma kilidi alınır.
FCM yayını onMessageReceived() yöntemi yürütmeyi tamamladığında uyanık kalma kilidi serbest bırakılır.
Uyanık kalma kilidi adları
Cihazda bir FCM mesajı alındığında, Android 16 ve sonraki sürümlerde GOOGLE_C2DM adıyla kısa bir uyanık kalma kilidi tutulur. Uyandırma kilidinin adı GCM_MESSAGE olur.
Ö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 olabildiğince hızlı bir şekilde tamamlayın veya ek işlem yapılması gerekiyorsa göreve devam etmek için bir çalışan planlayı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 alır. Uyandırma kilitleri, çalışanları oluşturan uygulamaya atfedilir.
Uyanık kalma kilidi adları
JobScheduler tarafından alınan uyanık kalma 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çlarla çevrili öğ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şaretli *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 kalıbı kullanan diğer işler:
*job*/@<name_space>@/<package_name>/<classname>
Android 16 QPR2 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 kalma kilidi şu şekilde adlandırılır:
*job*/@backup@/com.example.app/com.backup.BackupFileService
Android 16 QPR2 veya daha yeni sürümlerin yüklü olduğu cihazlarda uyanık tutma kilidinin adı:
*job*e/@backup@/#started#/com.example.app/com.backup.BackupFileService
Öneri
- Kullanıcı tarafından başlatılan indirme/ yükleme kullanım alanları için manuel uyanık kalma kilidi edinmeyin. Bunun yerine User-Initiated Data Transfer (UIDT) API'yi kullanın. Bu, kullanıcı tarafından başlatılan ve uzun süren veri aktarımı görevleri için belirlenen yoldur.
- JobScheduler tarafından oluşturulan ve yüksek uyanık kalma kilidi kullanımına sahip uyanık kalma kilitleri tespit ederseniz bunun nedeni, işinizi belirli senaryolarda tamamlanmayacak şekilde yanlış yapılandırmış olmanız olabilir. Özellikle
STOP_REASON_TIMEOUTile ilgili yüksek sayıda oluşum görüyorsanız iş durdurma nedenlerini analiz etmeyi düşünebilirsiniz. - 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.
Konum
LocationManager ve FusedLocationProviderClient, cihaz konumunu almak ve iletmek için uyandırma kilitlerini kullanır. Uyandırma kilitleri, bu API'leri çağıran uygulamayla ilişkilendirilir.
Uyanık kalma kilidi adları
Konum hizmetleri aşağıdaki adları kullanır:
CollectionLib-SigCollectorNetworkLocationLocatorNetworkLocationScannerNlpCollectorWakeLockNlpWakeLock*location*
Öneri
- Konum kullanımını optimize etme ile ilgili rehberimize göz atın. Zaman aşımlarını uygulama, konum isteği gruplamadan yararlanma veya pasif konum güncellemelerini kullanma gibi yöntemleri deneyebilirsiniz.
- Konum verilerini önbelleğe almak için ayrı ve sürekli bir uyanık kalma kilidi edinmekten kaçının. Bu işlem gereksizdir ve kaldırılmalıdır.
FusedLocationProviderveyaLocationManagerAPI'lerini kullanarak konum güncellemeleri istenirken sistem, konum etkinliği geri çağırması sırasında cihazı otomatik olarak uyandırır. Bunun yerine, konum etkinliklerini bellekte veya depolama alanında saklayın veWorkManagerkullanarak konum etkinliklerini düzenli olarak işleyin.
Uzaktan Mesajlaşma
Bu bölümde, uygulamaların bağlantıları sürdürmesi veya diğer cihazlardaki etkinliklere tepki vermesi gerekebileceği ve bu durumun uyandırma kilidi kullanımını etkileyebileceği uzaktan mesajlaşma senaryoları ele alınmaktadır. Yaygın kullanım alanları:
- Yerel ağ üzerinden bağlı harici bir cihazda gerçekleşen etkinlikleri izlemesi gereken video veya ses izleme tamamlayıcı uygulamaları.
- Masaüstü sürümüyle ağ soketi bağlantısı kuran mesajlaşma uygulamaları.
Bu uzaktan mesajlaşma senaryolarındaki uyandırmaların çoğu çekirdek uyandırma kilitleridir. Çekirdek uyanık kalma kilitleri uygulamayla ilişkilendirilmediğinden, burada listelenecek ilişkili uyanık kalma kilidi adları yoktur.
Öneri
- Ağ etkinlikleri sunucu tarafında işlenebiliyorsa istemcide bilgi almak için FCM'yi kullanın. FCM verilerinin ek olarak işlenmesi gerekiyorsa hızlandırılmış bir işleyici planlamayı seçebilirsiniz.
- Etkinliklerin bir soket bağlantısı kullanılarak istemci tarafında işlenmesi gerekiyorsa etkinlik kesintilerini dinlemek için uyanık kalma kilidi gerekmez. Veri paketleri kablosuz veya hücresel radyoya ulaştığında radyo donanımı, çekirdek uyandırma kilidi şeklinde bir kesme tetikler. Ardından, verileri işlemek için bir worker sınıfı planlamayı veya uyanık kalma kilidi edinmeyi seçebilirsiniz.
- Örneğin, bir ağ yuvasındaki veri paketlerini dinlemek için
ktor-networkkullanıyorsanız yalnızca paketler istemciye teslim edildiğinde uyanık kalma kilidi edinmeniz gerekir.
WorkManager
WorkManager çalışanları, görevleri arka planda yürütürken uyanık kalma kilitleri alır. Uyandırma kilitleri, çalışanları oluşturan uygulamaya atfedilir.
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 QPR2 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ış işçi olduğunu varsayalım. Paket adı com.example.app.
Android 15 veya daha eski sürümleri çalıştıran cihazlarda uyanık kalma kilidi şu şekilde adlandırılır:
*job*/com.example.app/androidx.work.impl.background.systemjob.SystemJobService
Android 16 QPR2 veya sonraki sürümlerin yüklü olduğu ve WorkManager 2.10.0+ kullanılan cihazlarda uyanık kalma kilidinin adı:
*job*e/#BackupFileWorker#/com.example.app/androidx.work.impl.background.systemjob.SystemJobService
Öneri
- Android 16 QPR2 veya sonraki sürümlerde uyanık kalma kilidi etiketlerinin daha ayrıntılı olması için WorkManager kitaplığı sürümünüzü en son kararlı sürüme yükseltin.
- WorkManager çalışanlarının kullanımınızı denetleyin. Özellikle görev planlama API'leri için pil kullanımını optimize etme ile ilgili yönergelerimize uyduğunu doğrulayın.
Android 16 QPR2 veya sonraki sürümlerde uyanık kalma kilidi etiketlerini daha ayrıntılı hale getirmek için worker sınıfına
setTraceTagyöntemini uygulayarak worker sınıfını hangi sınıfın planladığı gibi daha fazla hata ayıklama bilgileri ekleyin. - WorkManager tarafından oluşturulan ve yüksek uyanık kalma kilidi kullanımına sahip uyanık kalma kilitlerini tanımlarsanız bunun nedeni, worker sınıfınızı belirli senaryolarda tamamlanmayacak şekilde yanlış yapılandırmış olmanız olabilir. Özellikle
STOP_REASON_TIMEOUTile ilgili yüksek sayıda oluşum görüyorsanız işçinin durma nedenlerini analiz etmeyi düşünebilirsiniz. - Çalışan durdurma nedenlerini kaydetmenin yanı sıra çalışanlarınızda hata ayıklama ile ilgili dokümanlarımıza da göz atın. Ayrıca, uyandırma kilitlerinin ne zaman alındığını ve serbest bırakıldığını anlamak için sistem izlerini toplayıp analiz etmeyi de düşünebilirsiniz.
_UNKNOWN
Hata ayıklama araçları, uyanık kalma kilidi adının kimliği tanımlayabilecek bilgiler (PII) içerdiğini düşünürse gerçek uyanık kalma kilidi adını göstermez. Bunun yerine, uyanık kalma kilidini _UNKNOWN olarak etiketler. Örneğin, uyandırma kilidi adı bir e-posta adresi içeriyorsa araçlar bunu yapabilir.
Öneri
Uyanık kalma kilidi adlandırmayla ilgili en iyi uygulamalara uyun ve uyanık kalma kilidi adında kimliği tanımlayabilecek bilgiler kullanmayın. Uygulamanızla ilişkilendirilmiş _UNKNOWN adlı bir uyanık kalma kilidi bulursanız bu uyanık kalma kilidinin hangisi olduğunu belirlemeye çalışın ve farklı bir ad verin.