Ç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.
Diğer API'ler tarafından uyandırma kilidi alındığı senaryolarda, uyandırma kilidini manuel olarak almaktan kaçınmalısınız.
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ı 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
- Ses ve medya
- Bluetooth
- Cihaz Sensörleri
- Firebase Cloud Message (FCM)
- JobScheduler
- Konum
- 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
, 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
alarm türünü (cihazı uyandıran) kullanın. - Alarmları en aza indirin ve
onReceive()
yönteminde uzun süren işler yapmaktan kaçının.
Ses ve medya
Media API'ler, ses kaydederken veya çalarken uyandırma kilitleri edinebilir. 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.
Bluetooth
Platform Bluetooth API'leri, Bluetooth işlemleri gerçekleşirken uygulamaya atfedilebilecek herhangi bir uyandırma kilidi tutmaz. Bluetooth aktarımının arka planda gerçekleştiğini doğrulamaya yardımcı olmak için WorkManager'ı kullanarak bir görev planlayın.
Öneri
- Bluetooth eşlemesi sırasında manuel uyandırma kilidi almamak için Bluetooth cihazları eşlerken eşlik eden cihaz eşlemesini kullanın.
- Arka planda Bluetooth iletişimi nasıl yapılacağını öğrenmek için Arka planda iletişim kurma rehberine bakın.
- Manuel uyanık kalma kilidi gerekli görülürse uyanık kalma kilidini yalnızca Bluetooth işlemi 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 Health Services'i kullanın.
Veriler diğer uygulamalar tarafından toplanıyorsa verileri almak için WorkManager ile birlikte Health Connect'i kullanabilirsiniz.
Adım sayısı veya gidilen mesafedeki değişimi izleme gibi senaryolarda verileri almak için mobil cihazlarda Recording API'yi WorkManager ile birlikte kullanabilirsiniz.
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 kullanılarak tanımlanabilir.
Öneri
Sensörleri yüksek örnekleme hızlarında kayıt yapmak için kullanmak pilin önemli ölçüde tükenmesine neden olabilir. Pilin tükenmesini ve uyanık kalma kilidi kullanımını azaltmak için öneriler:
- Adım sayısını veya kat edilen mesafeyi izliyorsanız verileri pil açısından verimli bir şekilde kaydetmek için Recording API'yi kullanın.
- Wear OS'te pasif sensör izleme için pil kullanımını optimize etmek üzere Wear Health Services'i kullanın.
- Sensör sıklığınızı 200 Hz'den daha düşük bir değere indirin.
SensorManager
ile bir sensörü kaydederken sensör toplama mantığını kullanmak ve uygulamanın aldığı kesintilerin sayısını azaltmak için 30 saniyeden uzun birmaxReportLatencyUs
tanımlayın.- Sensör takibi süresince uzun bir uyandırma kilidi tutmaktan kaçının. Bunun yerine, AlarmManager kullanarak her 30 saniyede bir sensör verilerini yoklamak için alarmlar planlayın.
Firebase Cloud Message (FCM)
Uygulamaya Firebase Cloud Message (FCM) yayını gönderilirken uyandırma kilidi alını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ı
GOOGLE_C2DM
adında bir uyandırma kilidi edinilir.
Ö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ö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 edinmek 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-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.
- Konum API'lerini kullanıyorsanız doğrudan uyandırma kilitleri edinmeniz gerekmez. Gerekli uyandırma kilitlerini sizin için edinmek üzere API'leri kullanabilirsiniz.
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ı hızlandırılmış bir ç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 ve WorkManager 2.10.0+
kullanılan cihazlarda uyandırma kilidinin adı:
*job*e/#BackupFileWorker#/com.example.app/androidx.work.impl.background.systemjob.SystemJobService
Öneri
- Android 16 veya sonraki sürümlerde uyandırma kilidi etiketlerini daha ayrıntılı hale getirmek için WorkManager sürümünüzü yükseltin.
- 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önergelerimize uyun.
_UNKNOWN
Hata ayıklama araçları, 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.