Doz ve Uygulamayı Beklemeye Alma için optimizasyon yapın

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.

Şekil 1. Doz, uygulamaların ağı kullanması ve beklemedeki etkinlikleri işleyebilmesi için yinelenen bakım dönemi sağlar.

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:

Doz kontrol listesi

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:

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:

  1. 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.
  2. Cihazı geliştirme makinenize bağlayın ve uygulamanızı yükleyin.
  3. Uygulamanızı çalıştırın ve etkin bırakın.
  4. Şu komutu çalıştırarak sistemi boşta kalma moduna geçirin:
        $ adb shell dumpsys deviceidle force-idle
        
  5. Hazır olduğunuzda aşağıdaki komutu çalıştırarak boş moddan çıkın:
        $ adb shell dumpsys deviceidle unforce
        
  6. Şu komutu uygulayarak cihazı yeniden etkinleştirin:
        $ adb shell dumpsys battery reset
        
  7. 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:

  1. 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.
  2. Cihazı geliştirme makinenize bağlayın ve uygulamanızı yükleyin.
  3. Uygulamanızı çalıştırın ve etkin bırakın.
  4. Aşağıdaki komutları çalıştırarak uygulamayı Uygulama Bekleme moduna zorlama:
        $ adb shell dumpsys battery unplug
        $ adb shell am set-inactive <packageName> true
        
  5. 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>
        
  6. 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