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

Android'in, bir 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 vardır: Doz ve Uygulamayı Beklemeye Alma. Doz, cihaz uzun süre kullanılmadığında uygulamaların arka plan CPU ve ağ etkinliğini erteleyerek pil tüketimini azaltır. Uygulama Bekletme, son kullanıcı etkinliği olmayan uygulamalar için arka plan ağ etkinliğini erteler.

Cihaz Doz modundayken uygulamaların yoğun pil kullanan belirli kaynaklara erişimi bakım dönemine kadar ertelenir. Belirli kısıtlamalar Güç yönetimi kısıtlamaları bölümünde listelenmiştir.

Doz ve Uygulama Bekletme, özellikle API düzeyi 23'ü hedefleyip hedeflemediklerinden bağımsız olarak Android 6.0 veya sonraki sürümleri üzerinde çalışan tüm uygulamaların davranışını yönetir. Kullanıcılara en iyi deneyimi sağlamak için uygulamanızı Doz ve Uygulama Bekletme modlarında test edin ve kodunuzda gerekli düzenlemeleri yapın. Aşağıdaki bölümlerde ayrıntılı bilgi verilmektedir.

Doz'u Anlama

Bir kullanıcı, ekran kapalıyken fişten çekin ve bir süre hareketsiz kalırsa cihaz Doz moduna girer. Doz modunda sistem, uygulamaların ağ ve CPU yoğun hizmetlere erişimini kısıtlayarak pil tasarrufu sağlamaya çalışır. Ayrıca, uygulamaların ağa erişmesini engeller ve işlerini, senkronizasyonlarını ve standart alarmlarını erteler.

Sistem, düzenli aralıklarla Doz'dan çıkar ve uygulamaların ertelenen etkinliklerini tamamlamasını sağlar. Bu bakım dönemi 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 bekleyen etkinlikleri işlemesi için yinelenen bir bakım dönemi sağlar.

Bakım dönemi sona erdiğinde sistem tekrar Doz'a girer. Bu işlemle ağ erişimi askıya alınır ve işler, senkronizasyonlar ve alarmlar ertelenir. Zaman içinde sistem, bakım aralıklarını daha seyrek planlar. Böylece, cihaz şarj edilmiyorken daha uzun süre etkinlik olmadığında pil tüketiminin azaltılmasına yardımcı olur.

Kullanıcı cihazı hareket ettirerek, ekranı açarak veya bir şarj cihazı bağlayarak uyandırdığında, sistem Doz'dan çıkar ve tüm uygulamalar normal şekilde çalışmaya devam eder.

Doz kısıtlamaları

Sistem, Doz modundayken uygulamalarınıza aşağıdaki kısıtlamaları uygular:

Doz kontrol listesi

Uygulamanızı Doz'a uyarlayın

Doz, sundukları özelliklere ve kullandıkları hizmetlere bağlı olarak uygulamaları farklı şekilde etkileyebilir. Birçok uygulama, herhangi bir değişiklik yapmadan Doz döngülerinde normal şekilde çalışır. Bazı durumlarda, uygulamanızın ağı, alarmları, işleri ve senkronizasyonu yönetme şeklini optimize etmeniz gerekir. Uygulamalar her bakım dönemi için etkinlikleri verimli bir şekilde yönetebilmelidir.

Alarm planlamanıza yardımcı olması için iki AlarmManager yöntemi kullanabilirsiniz: setAndAllowWhileIdle() ve setExactAndAllowWhileIdle(). Bu yöntemlerle, cihaz Doz modunda olsa bile etkinleşen alarmlar ayarlayabilirsiniz.

Özellikle uygulama gıdıklamalar veya bildirimler gibi gerçek zamanlı mesajlara dayanıyorsa ağ erişimindeki Doz kısıtlamasının da uygulamanızı etkileme olasılığı yüksektir. Uygulamanız, mesajları almak için ağa kalıcı bir bağlantı gerektiriyorsa mümkünse Firebase Cloud Messaging (FCM) kullanın.

Uygulamanızın Doz ile beklendiği gibi davrandığını onaylamak için sistemi Doz'a girip çıkmaya zorlamak ve uygulamanızın davranışını gözlemlemek için adb komutlarını kullanabilirsiniz. Ayrıntılar için Doz ve Uygulamayı Beklemeye Alma ile test etme bölümüne bakın.

Uygulamayı Beklemeye Alma Durumunu Anlama

Uygulamayı Beklemeye Alma özelliği, kullanıcının uygulamayı aktif olarak kullanmadığı durumlarda sistemin boşta olduğunu belirlemesini sağlar. Bu tespiti, kullanıcı belirli bir süre boyunca uygulamaya dokunmadığında ve aşağıdaki koşullardan hiçbiri geçerli olmadığında sistem belirler:

  • Kullanıcı uygulamayı açıkça başlatır.
  • Uygulamanın şu anda ön planda, etkinlik veya ön plan hizmeti olarak ya da başka bir etkinlik veya ön plan hizmeti tarafından kullanılan bir işlemi var.
  • Uygulama, kullanıcıların kilit ekranında veya bildirim tepsisinde göreceği bir bildirim oluşturur.

Kullanıcı cihazı bir güç kaynağına taktığında sistem, uygulamaları bekleme durumundan çıkarır. Böylece kullanıcılar ağa serbest bir şekilde erişebilir, bekleyen işleri ve senkronizasyonları yürütebilir. Cihaz uzun süre boşta kalırsa sistem, boştaki uygulamaların yaklaşık günde bir kez ağına erişmesine izin verir.

Cihaz boştayken uygulamanızla etkileşimde bulunmak için FCM'yi kullanma

Firebase Cloud Messaging (FCM), Android cihazlardaki arka uç hizmetleri ve uygulamalar 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ı sunar. Gerçek zamanlı mesajlaşma gerektiren 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 gerekli kılarak pil tüketimini önemli ölçüde optimize eder ve bu da pilin hızla tükenmesine neden olabilir. Bu nedenle, uygulamanız bir 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şta kalma modlarıyla çalışacak şekilde optimize edilmiştir. FCM yüksek öncelikli mesajları, kullanıcıyla etkileşim kurmak için uygulamanızı uyandırmanızı sağlar. Doz veya Uygulama Bekletme modunda, sistem mesajı iletir ve uygulamanın ağ hizmetlerine ve kısmi uyanık kalma kilitlerine geçici olarak erişmesine izin verir, ardından cihazı veya uygulamayı boşta durumuna döndürür. Zamana duyarlı, kullanıcıların görebileceği bildirimler için Doz modunda dağıtımı etkinleştirmek üzere yüksek öncelikli mesajlar kullanabilirsiniz. Yüksek öncelikli mesajlar, bildirim almanıza yol açabilir. Daha fazla bilgi için yüksek öncelikli mesajlarla ilgili FCM rehberine bakın.

Uygulama içeriğini arka planda güncel tutmak veya veri senkronizasyonu başlatmak gibi bildirimlerle sonuçlanmayan mesajlar için normal öncelikli FCM mesajlarını kullanın. Normal öncelikli mesajlar, cihaz Doz modunda değilse hemen teslim edilir. Cihaz Doz modundaysa periyodik Doz bakım dönemleri sırasında veya kullanıcı cihazı uyandırır uyandırmaz gönderilir.

Genel bir en iyi uygulama olarak, uygulamanız aşağı akış mesajları gerektiriyorsa FCM'yi kullanın. Uygulamanız zaten FCM'yi kullanıyorsa yüksek öncelikli mesajları yalnızca kullanıcılara yönelik bildirimlerle sonuçlanan mesajlar için 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. Bu, sınırlı kullanım alanları için yeterli olmayabilir. Bu gibi durumlarda sistem, Doz ve Uygulama Bekletme optimizasyonlarından kısmen muaf olan uygulamaların yapılandırılabilir bir listesini sağlar.

Kısmen muaf olan bir uygulama, ağı kullanıp Doz ve Uygulamayı Beklemeye Alma sırasında kısmi uyanık kalma kilitlerini tutabilir. Ancak, diğer uygulamalarda olduğu gibi, uygulama için de başka 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() yöntemini çağırarak uygulamanın o anda muafiyet listesinde olup olmadığını kontrol edebilir.

Kullanıcılar, Ayarlar > Pil > Pil Optimizasyonu'nda muaf tutulan uygulamaların listesini manuel olarak yapılandırabilir. Alternatif olarak sistem, uygulamaların kullanıcılardan kendilerini muaf tutmalarını isteyebilecekleri yöntemler sağlar:

Bir uygulama, isIgnoringBatteryOptimizations() yöntemini çağırarak şu anda muafiyet listesinde olup olmadığını kontrol edebilir.

Doz ve Uygulamayı Beklemeye Alma ile test etme

Kullanıcılarınıza mükemmel bir deneyim sağlamak için uygulamanızı Doz ve Uygulamayı Beklemeye Alma modunda tam olarak test edin.

Uygulamanızı Doz ile test edin

Doz modunu aşağıdakileri yaparak test edebilirsiniz:

  1. Android 6.0 (API düzeyi 23) veya sonraki bir sistem görüntüsüne sahip donanım cihazını 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 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şta kalma modundan çı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 bir şekilde kurtarıldığından emin olun.

Uygulamayı Bekleme modu ile test etme

Uygulama Beklemeye Alma modunu uygulamanızla test etmek için aşağıdakileri yapın:

  1. Android 6.0 (API düzeyi 23) veya sonraki bir sistem görüntüsüne sahip donanım cihazını 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 Beklemeye Alma moduna zorlayın:
        $ adb shell dumpsys battery unplug
        $ adb shell am set-inactive <packageName> true
        
  5. Aşağıdaki komutları kullanarak uygulamanızı uyandırmayı simüle edin:
        $ adb shell am set-inactive <packageName> false
        $ adb shell am get-inactive <packageName>
        
  6. Uygulamanızı uyandırdıktan sonra 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 amaç işlemini kullanmasının kabul edilip edilmediği açıklanmaktadır. Genel olarak, Doz veya Uygulama Bekletme, uygulamanın temel işlevini bozmadığı ya da uygulamanızın FCM yüksek öncelikli mesajları kullanamamasının teknik bir nedeni olmadığı sürece bu istisnalara uymaz.

Daha fazla bilgi edinmek için Diğer kullanım alanları için destek bölümüne bakın.

Tür Kullanım alanı FCM kullanılabilir mi? Muafiyet kabul edilebilir mi? Notlar
Anlık mesajlaşma, sohbet veya arama uygulaması. Cihaz Doz modundayken veya uygulama, Uygulama Bekleme modundayken kullanıcılara gerçek zamanlı mesajların iletilmesini gerektirir. Evet, FCM'yi kullanarak Kabul Edilemez Uygulamayı uyandırmak ve ağa erişmek için FCM yüksek öncelikli mesajlarını kullanın.
Evet, ancak FCM yüksek öncelikli iletileri kullanmıyor.
Anlık mesajlaşma, sohbet veya arama uygulaması; kurumsal VOIP uygulamaları. Hayır, başka bir mesajlaşma hizmetine teknik bağımlılık nedeniyle FCM kullanılamıyor veya Doz ve Uygulama Bekletme, uygulamanın temel işlevini bozuyor. Kabul edilebilir
Güvenlik uygulaması. Kullanıcıların ve ailelerinin güvenliğini sağlayan uygulamalar. Geçerli durumlarda 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 planlamaktır. Geçerli durumlarda Kabul edilebilir
Çevre birimi cihazı tamamlayıcı uygulaması. Uygulamanın temel işlevi, çevre birimi cihazına internet erişimi sağlamak amacıyla çevre birimi cihazıyla kalıcı bir bağlantı sağlamaktır. Geçerli durumlarda Kabul edilebilir
Uygulamanın yalnızca senkronizasyon için çevre birimi cihazına düzenli olarak bağlanması veya yalnızca standart Bluetooth profilleriyle bağlanan kablosuz kulaklık gibi cihazlara bağlanması gerekir. Geçerli durumlarda Kabul Edilemez