Android'de, cihaz güç kaynağına bağlı değilken uygulamaların nasıl davranacağını yöneterek kullanıcıların pil ömrünü uzatan iki güç tasarrufu özelliği bulunur: Uyku Modu ve Uygulama Bekleme Modu. Dinlenme, cihaz uzun süre kullanılmadığında uygulamaların arka plan CPU ve ağ etkinliğini erteleyerek pil tüketimini azaltır. Uygulama Bekleme, yakın zamanda kullanıcı etkinliği olmayan uygulamaların arka plan ağ etkinliğini erteler.
Cihaz Doz modundayken, uygulamaların pili tüketen belirli kaynaklara erişimi, bakım dönemine kadar ertelenir. İlgili kısıtlamalar Güç yönetimi kısıtlamaları bölümünde listelenmiştir.
Doze ve Uygulama Bekleme, API düzeyi 23'ü hedefleyip hedeflemediklerinden bağımsız olarak Android 6.0 veya sonraki sürümlerde çalışan tüm uygulamaların davranışını yönetir. Kullanıcılara en iyi deneyimi sunmak için uygulamanızı Doz ve Uygulama Bekleme modlarında test edip kodunuzda gerekli düzenlemeleri yapın. Aşağıdaki bölümlerde ayrıntılı bilgi verilmektedir.
Doz Değerini Anlama
Kullanıcı, bir cihazı fişten çıkarıp bir süre boyunca hareketsiz halde bırakırsa ekran kapalıyken Doz moduna girer. Uyku modunda sistem, uygulamaların ağa ve yoğun CPU kullanan hizmetlere erişimini kısıtlayarak pilden tasarruf etmeye çalışır. Ayrıca uygulamaların ağa erişmesini engeller ve işlerini, senkronizasyonlarını ve standart alarmları erteler.
Sistem, uygulamaların ertelenen etkinliklerini tamamlamasına izin vermek için düzenli aralıklarla Doz'dan kısa bir süreliğine çıkar. Bu bakım aralığı sırasında sistem, bekleyen tüm senkronizasyonları, işleri ve alarmları çalıştırır ve uygulamaların ağa erişmesine izin verir.
Bakım aralığı sona erdiğinde sistem tekrar Uyku moduna girer. Bu modda ağ erişimi askıya alınır ve görevler, senkronizasyonlar ve alarmlar ertelenir. Sistem, zaman içinde bakım aralıklarını daha seyrek planlayarak cihaz şarj edilmediğinde uzun süre kullanılmadığında pil tüketimini azaltır.
Kullanıcı, cihazı hareket ettirerek, ekranı açarak veya bir şarj cihazı takarak uyandırdığında, sistem Doz'dan çıkar ve tüm uygulamalar normal şekilde çalışmaya devam eder.
Doz kısıtlamaları
Sistem, Dozdayken uygulamalarınıza aşağıdaki kısıtlamaları uygular:
- Ağ erişimini askıya alır.
- Uyanık kalma kilitlerini yoksayar.
setExact()
vesetWindow()
dahil olmak üzere standartAlarmManager
alarmlarını bir sonraki bakım dönemine erteler.- Uyku modundayken çalacak alarmlar ayarlamanız gerekiyorsa
setAndAllowWhileIdle()
veyasetExactAndAllowWhileIdle()
'ı kullanın. setAlarmClock()
ile ayarlanan alarmlar normal şekilde çalışmaya devam eder. Sistem, bu alarmlar çalmadan kısa süre önce Uyku modundan çıkar.
- Uyku modundayken çalacak alarmlar ayarlamanız gerekiyorsa
- Kablosuz ağ taraması gerçekleştirmez.
- Senkronizasyon bağdaştırıcılarının çalışmasına izin vermez.
JobScheduler
işlevinin çalışmasına izin vermiyor.
Doz kontrol listesi
- Mümkünse aşağı akış mesajları için Firebase Cloud Messaging'i (FCM) kullanın.
- Kullanıcılarınızın hemen bir bildirim görmesi gerekiyorsa FCM yüksek öncelikli mesajı kullanın. Yalnızca bildirimle sonuçlanan mesajlar için yüksek öncelik kullanın. Daha fazla yardım için FCM'nin Android için mesaj önceliği ile ilgili dokümanlarına bakın.
- Sonraki ağ erişimine gerek olmaması için ilk mesaj yükü içinde yeterli bilgi sağlayın.
setAndAllowWhileIdle()
vesetExactAndAllowWhileIdle()
ile önemli alarmlar kurun.- Uygulamanızı Doz modunda test edin.
Uygulamanızı Doz'a uyarlama
Doze, sunduğu özelliklere ve kullandığı hizmetlere bağlı olarak uygulamaları farklı şekillerde etkileyebilir. Birçok uygulama, Doz döngüleri boyunca herhangi bir değişiklik yapmadan normal şekilde çalışır. Bazı durumlarda, uygulamanızın ağ, alarmlar, işler ve senkronizasyonları yönetme şeklini optimize etmeniz gerekir. Uygulamalar, her bakım aralığı sırasında etkinlikleri verimli bir şekilde yönetebilmelidir.
Alarm planlama konusunda yardımcı olması için iki AlarmManager
yöntemi kullanabilirsiniz: setAndAllowWhileIdle()
ve setExactAndAllowWhileIdle()
. Bu yöntemler sayesinde cihaz Doz'da olsa bile
çözecek alarmlar ayarlayabilirsiniz.
Ağ erişimi için Doze kısıtlaması, özellikle uygulama dokunma veya bildirim gibi anlık mesajlara dayanıyorsa uygulamanızı da etkileyebilir. Uygulamanızın mesaj almak için ağa sürekli bağlantı kurması gerekiyorsa mümkünse Firebase Cloud Messaging (FCM)'i kullanın.
Uygulamanızın Doz'da beklendiği gibi davrandığını onaylamak için adb
komutlarını kullanarak sistemi Doz'a girip çıkmaya zorlayabilir ve uygulamanızın davranışını gözlemleyebilirsiniz. Ayrıntılar için Doz ve Uygulamayı Beklemeye Alma ile test etme bölümüne bakın.
Uygulamayı Beklemeye Alma özelliğini anlama
Uygulamayı Beklemeye Alma özelliği, kullanıcı bir uygulamayı aktif olarak kullanmadığı zaman sistemin o uygulamanın boşta olduğunu belirlemesine olanak sağlar. Sistem, kullanıcı belirli bir süre boyunca uygulamaya dokunmadığında ve aşağıdaki koşullardan hiçbiri geçerli olmadığında bu kararı verir:
- Kullanıcı uygulamayı açıkça başlatır.
- Uygulamada şu anda etkinlik veya ön plan hizmeti olarak ön planda bir işlem var ya da başka bir etkinlik veya ön plan hizmeti tarafından kullanılıyor.
- Uygulama, kullanıcıların kilit ekranında veya bildirim tepsisinde gördüğü bir bildirim oluşturur.
Kullanıcı cihazı bir güç kaynağına taktığında sistem, uygulamaları bekleme durumundan çıkararak ağa özgürce erişmesine ve bekleyen işleri yürütmesine ve senkronizasyonları yapmasına izin verir. Cihaz uzun süre boşta kalırsa sistem, boştaki uygulamaların günde yaklaşık bir kez ağ erişimine izin verir.
Cihaz boştayken uygulamanızla etkileşimde bulunmak için FCM'yi kullanın
Firebase Cloud Messaging (FCM), Android cihazlardaki uygulamalar ile arka uç hizmetleri arasında gerçek zamanlı aşağı akış mesajlaşmasını desteklemenize olanak tanıyan, buluttan cihaza yönelik bir hizmettir. FCM, buluta tek ve kalıcı bir bağlantı sağlar. Anlık mesajlaşmaya ihtiyaç duyan tüm uygulamalar bu bağlantıyı paylaşabilir. Bu paylaşılan bağlantı, birden fazla uygulamanın kendi ayrı kalıcı bağlantılarını sürdürmesini gereksiz hale getirerek pili hızla tüketebilecek bağlantıları önemli ölçüde optimize eder. Bu nedenle, uygulamanız arka uç hizmetiyle mesajlaşma entegrasyonu gerektiriyorsa kendi kalıcı ağ bağlantınızı korumak yerine mümkünse FCM'yi kullanmanızı önemle tavsiye ederiz.
FCM, Doz ve Uygulamayı Beklemeye Alma boş modlarıyla çalışacak şekilde optimize edilmiştir. FCM yüksek öncelikli mesajlar, kullanıcının ilgisini çekmek için uygulamanızı uyandırmanızı sağlar. Uyku veya Uygulama Bekleme modunda sistem, mesajı iletir ve uygulamaya ağ hizmetlerine ve kısmi uyanma kilitlerine geçici erişim verir, ardından cihazı veya uygulamayı boşta duruma döndürür. Zamana duyarlı, kullanıcının görebildiği bildirimlerde Doz modunda teslimi etkinleştirmek için yüksek öncelikli mesajlar kullanmayı düşünün. Yüksek öncelikli mesajlar, bildirimlerle sonuçlanabilir. Daha fazla bilgi için yüksek öncelikli mesajlarla ilgili FCM rehberine bakın.
Uygulama içeriğini arka planda güncel tutma veya veri senkronizasyonları başlatma gibi, bildirim göndermeyen mesajlar için normal öncelikli FCM mesajlarını kullanın. Cihaz Doz'da değilse normal öncelikli mesajlar hemen teslim edilir. Cihaz Uyku modundaysa bu bildirimler, düzenli Uyku bakımı aralıkları sırasında veya kullanıcı cihazı uyandırır uyanmaz gönderilir.
Genel en iyi uygulama olarak, uygulamanız aşağı akış mesajlaşması gerektiriyorsa FCM'yi kullanın. Uygulamanızda zaten FCM kullanılıyorsa uygulamanızın yalnızca kullanıcılara yönelik bildirimlerle sonuçlanan mesajlar için yüksek öncelikli mesajlar kullandığından emin olun.
Diğer kullanım alanları için destek
Neredeyse tüm uygulamalar ağ bağlantısını, alarmları, işleri ve senkronizasyonları yöneterek ve FCM mesajlarını kullanarak Doz'u destekleyebilir. Dar bir kullanım alanı için bu yeterli olmayabilir. Bu tür durumlarda sistem, Doze ve Uygulama Bekleme optimizasyonlarından kısmen muaf olan, yapılandırılabilir bir uygulama listesi sağlar.
Kısmen muaf olan bir uygulama, ağı kullanabilir ve Doz ile Uygulamayı Beklemeye Alma sırasında kısmi uyanık kalma kilitlerini tutabilir. Ancak, diğer uygulamalarda olduğu gibi uygulama için de
diğer kısıtlamalar geçerli olmaya devam eder. Örneğin, uygulamanın işleri ve senkronizasyonları API düzeyi 23 ve önceki sürümlerde ertelenir ve normal AlarmManager
alarmları tetiklenmez. Bir uygulama, isIgnoringBatteryOptimizations()
kodunu çağırarak muafiyet listesinde olup olmadığını kontrol edebilir.
Kullanıcılar, muaf tutulan uygulamaların listesini Ayarlar > Pil > Pil Optimizasyonu'nda manuel olarak yapılandırabilir. Alternatif olarak sistem, uygulamaların kullanıcılardan bunları muaf tutmasını isteyecek yöntemler sunar:
- Çoğu uygulama,
ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS
içeren bir intent çağırabilir. - Kabul edilebilir bir kullanım alanını karşılayan uygulamalar, bunun yerine
ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
intent işlemini içeren bir intent çağırarak kullanıcının sistem ayarlarına gitmeden uygulamayı doğrudan muafiyet listesine eklemesini sağlayabilir.
Bir uygulama, isIgnoringBatteryOptimizations()
kodunu çağırarak muafiyet listesinde olup olmadığını kontrol edebilir.
Doz ve Uygulamayı Beklemeye Alma özellikleriyle test edin
Kullanıcılarınıza mükemmel bir deneyim sunmak için uygulamanızı Doze ve Uygulama Bekleme modlarında tamamen test edin.
Uygulamanızı Doze ile test etme
Aşağıdakileri yaparak Doz modunu test edebilirsiniz:
- Android 6.0 (API düzeyi 23) veya sonraki sürümlere sahip bir donanım cihazı ya da sanal cihaz yapılandırın.
- Cihazı geliştirme makinenize bağlayın ve uygulamanızı yükleyin.
- Uygulamanızı çalıştırın ve etkin bırakın.
- Şu komutu çalıştırarak sistemi boşta kalma moduna geçirin:
$ adb shell dumpsys deviceidle force-idle
- Hazır olduğunuzda aşağıdaki komutu çalıştırarak boş moddan çıkın:
$ adb shell dumpsys deviceidle unforce
- Şu komutu uygulayarak cihazı yeniden etkinleştirin:
$ adb shell dumpsys battery reset
- Cihazı yeniden etkinleştirdikten sonra uygulamanızın davranışını gözlemleyin. Cihaz Doz'dan çıktığında uygulamanın sorunsuz şekilde kurtarıldığından emin olun.
Uygulamayı Beklemeye Alma özelliğiyle uygulamanızı test etme
Uygulamanızın Bekleme Modu'nu test etmek için şunları yapın:
- Android 6.0 (API düzeyi 23) veya sonraki sürümlere sahip bir donanım cihazı ya da sanal cihaz yapılandırın.
- Cihazı geliştirme makinenize bağlayın ve uygulamanızı yükleyin.
- Uygulamanızı çalıştırın ve etkin bırakın.
- Aşağıdaki komutları çalıştırarak uygulamayı Uygulama Bekleme moduna zorlama:
$ adb shell dumpsys battery unplug $ adb shell am set-inactive <packageName> true
- Aşağıdaki komutları kullanarak uygulamanızı uyandırma simülasyonu yapın:
$ adb shell am set-inactive <packageName> false $ adb shell am get-inactive <packageName>
- Uyandırdıktan sonra uygulamanızın davranışını gözlemleyin. Uygulamanın bekleme modundan sorunsuz bir şekilde çıktığından emin olun. Özellikle, uygulamanızın bildirimlerinin ve arka plan işlerinin beklendiği gibi çalışıp çalışmadığını kontrol edin.
Muafiyet için kabul edilebilir kullanım alanları
Aşağıdaki tabloda, çeşitli kullanım alanları ve uygulamaların bu durumlarda ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
intent işlemini kullanmasının kabul edilebilir olup olmadığı açıklanmaktadır. Genel olarak, Doz veya Uygulama Bekletme özelliği, uygulamanın temel işlevini bozmadığı veya uygulamanızın FCM yüksek öncelikli mesajları kullanamamasıyla ilgili teknik bir neden olmadığı sürece uygulamanız bu istisnalara uymaz.
Daha fazla bilgi edinmek isterseniz Diğer kullanım alanları için destek bölümüne bakın.
Tür | Kullanım alanı | FCM'yi kullanabilir misiniz? | Muafiyet kabul edilebilir mi? | Notlar |
---|---|---|---|---|
Anlık mesajlaşma, sohbet veya arama uygulaması. | Cihaz Dozdayken veya uygulama Uygulama Bekleme Modu'ndayken kullanıcılara gerçek zamanlı mesajların teslim edilmesini gerektirir. | Evet, FCM'yi kullanıyorum | Kabul Edilemez | Uygulamayı uyandırmak ve ağa erişmek için FCM yüksek öncelikli mesajları kullanın. |
Evet, ancak FCM yüksek öncelikli mesajları kullanmıyor. | ||||
Anlık mesajlaşma, sohbet veya arama uygulaması; kurumsal VOIP uygulamaları. | Hayır, başka bir mesajlaşma hizmetine teknik bağımlı olduğu için FCM kullanılamıyor veya Doz ve Uygulama Bekletme modu uygulamanın temel işlevini bozuyor. | Kabul edilebilir | ||
Güvenlik uygulaması. | Kullanıcılarının ve ailelerinin güvenliğini sağlayan uygulamalar | Geçerliyse. | Kabul edilebilir | |
Görev otomasyon uygulaması. | Uygulamanın temel işlevi; anlık mesajlaşma, sesli arama veya yeni fotoğraf yönetimi gibi otomatik işlemler programlamadır. | Geçerliyse. | Kabul edilebilir | |
Çevre birimi cihazı tamamlayıcı uygulaması. | Uygulamanın temel işlevi, çevre birimi cihaza internet erişimi sağlamak için çevre birimi cihazla sürekli bağlantı kurmaktır. | Geçerliyse. | Kabul edilebilir | |
Uygulamanın senkronize edilmesi için yalnızca düzenli olarak bir çevre birimi cihazına bağlanması veya yalnızca standart Bluetooth profilleriyle bağlanan cihazlara (kablosuz kulaklık gibi) bağlanması gerekir. | Geçerliyse. | Kabul Edilemez |