Android'de, cihaz bir güç kaynağına bağlı değilken uygulamaların nasıl davranacağını yöneterek kullanıcılar için pil ömrünü uzatan iki güç tasarrufu özelliği vardır: Doze ve Uygulamayı Beklemeye Alma. Doze, cihaz uzun süre kullanılmadığında uygulamalar için arka plan CPU ve ağ etkinliğini erteleyerek pil tüketimini azaltır. Uygulamayı Beklemeye Alma, son zamanlarda kullanıcı etkinliği olmayan uygulamaların arka plan ağ etkinliğini erteler.
Cihaz Doze modundayken uygulamaların pil tüketimi yüksek olan 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.
Doze ve Uygulamayı Beklemeye Alma, özellikle API düzeyi 23'ü hedefleyip hedeflemediklerine bakılmaksızın 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ı Doze ve Uygulamayı Beklemeye Alma modlarında test edin ve kodunuzda gerekli düzenlemeleri yapın. Aşağıdaki bölümlerde ayrıntılı bilgi verilmiştir.
Doze'u anlama
Kullanıcı bir cihazı bir süre boyunca fişe takılı olmadan ve sabit bir şekilde, ekranı kapalı olarak bırakırsa cihaz Doz moduna girer. Doze modunda sistem, uygulamaların ağa ve CPU'yu yoğun kullanan hizmetlere erişimini kısıtlayarak pil tasarrufu yapmaya çalışır. Ayrıca uygulamaların ağa erişmesini engeller ve işlerini, senkronizasyonlarını ve standart alarmlarını erteler.
Sistem, uygulamaların ertelenen etkinliklerini tamamlamasına izin vermek için belirli aralıklarla kısa bir süre Doze modundan çıkar. Bu bakım döneminde sistem, bekleyen tüm senkronizasyonları, işleri ve alarmları çalıştırır ve uygulamaların ağa erişmesine izin verir.
Bakım dönemi sona erdiğinde sistem tekrar Doze moduna girer, ağ erişimini askıya alır ve işleri, senkronizasyonları ve alarmları erteler. Zaman içinde sistem, bakım dönemlerini daha seyrek planlar. Bu sayede, cihazın şarj edilmediği uzun süreli işlem yapılmayan durumlarda pil tüketimi azaltılır.
Kullanıcı cihazı hareket ettirerek, ekranı açarak veya şarj cihazı bağlayarak uyandırdığında sistem Doze modundan çıkar ve tüm uygulamalar normal etkinliğe devam eder.
Doze kısıtlamaları
Sistem, Doze modundayken uygulamalarınıza aşağıdaki kısıtlamaları uygular:
- Ağ erişimini askıya alır.
- Uyanık kalma kilitlerini yok sayar.
AlarmManagervesetWindow()dahil olmak üzere standart alarmlarısetExact()bir sonraki bakım dönemine erteler.- Doze modundayken çalacak alarmlar ayarlamanız gerekiyorsa
setAndAllowWhileIdle()veyasetExactAndAllowWhileIdle()yöntemini kullanın. setAlarmClock()ile ayarlanan alarmlar normal şekilde çalmaya devam eder. Sistem, bu alarmlar çalmadan kısa bir süre önce Doze modundan çıkar.
- Doze modundayken çalacak alarmlar ayarlamanız gerekiyorsa
- Kablosuz ağ taraması yapmaz.
- Senkronizasyon adaptörlerinin çalışmasına izin vermez.
JobScheduleruygulamasının çalışmasına izin vermez.
Doze yapılacaklar listesi
- Mümkünse aşağı akış mesajları için Firebase Cloud Messaging'i (FCM) kullanın.
- Kullanıcılarınızın bir bildirimi hemen görmesi gerekiyorsa
RemoteNotificationmesaj türünü kullanın. Daha fazla bilgi içinRemoteNotificationmesaj türüyle ilgili FCM'nin belgelerine bakın. - İlk mesaj yükünde yeterli bilgi sağlayın. Böylece sonraki ağ erişimi gereksiz olur.
setAndAllowWhileIdle()vesetExactAndAllowWhileIdle()ile kritik alarmlar ayarlayın.- Uygulamanızı Doze modunda test edin.
Uygulamanızı Doze'a uyarlama
Doze, sundukları özelliklere ve kullandıkları hizmetlere bağlı olarak uygulamaları farklı şekilde etkileyebilir. Birçok uygulama, Doze döngüleri boyunca herhangi bir değişiklik yapılmadan normal şekilde çalışır. Bazı durumlarda, uygulamanızın ağı, alarmları, işleri ve senkronizasyonları yönetme şeklini optimize etmeniz gerekir. Uygulamalar, her bakım döneminde etkinlikleri verimli bir şekilde yönetebilmelidir.
Alarmları planlamak için iki AlarmManager yöntemini kullanabilirsiniz: setAndAllowWhileIdle() ve setExactAndAllowWhileIdle(). Bu yöntemlerle, cihaz Doze modunda olsa bile tetiklenen alarmlar ayarlayabilirsiniz.
Doze'un ağ erişimi kısıtlaması, özellikle de uygulama, uyarılar veya bildirimler gibi gerçek zamanlı mesajlara dayanıyorsa uygulamanızı etkileyebilir. Uygulamanız mesaj almak için ağa kalıcı bir bağlantı gerektiriyorsa mümkünse Firebase Cloud Messaging (FCM) kullanın.
Uygulamanızın Doze ile beklendiği gibi davrandığını onaylamak için adb komutlarını kullanarak sistemi Doze'a girmeye ve çıkmaya zorlayabilir ve uygulamanızın davranışını gözlemleyebilirsiniz. Ayrıntılar için Doze ve Uygulamayı Beklemeye Alma ile test etme başlıklı makaleyi inceleyin.
Uygulamayı Beklemeye Alma özelliğini anlama
Uygulamayı Beklemeye Alma, kullanıcı bir uygulamayı etkin olarak kullanmadığında sistemin uygulamanın boşta olduğunu belirlemesini 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ı manuel olarak 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 vardır.
- 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 çıkararak ağa serbestçe erişmelerine ve bekleyen işleri ve senkronizasyonları yürütmelerine olanak tanır. Cihaz uzun süre boşta kalırsa sistem, boşta olan uygulamaların ağ erişimine günde yaklaşık bir kez izin verir.
Cihaz boştayken uygulamanızla etkileşimde bulunmak için FCM'yi kullanma
Firebase Cloud Messaging (FCM), Android cihazlardaki arka uç hizmetleri ile uygulamalar arasında gerçek zamanlı aşağı akış mesajlaşmasını desteklemenize olanak tanıyan bir buluttan cihaza hizmetidir. FCM, buluta tek ve kalıcı bir bağlantı sağlar. 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ürme ihtiyacını ortadan kaldırarak pil tüketimini önemli ölçüde optimize eder. Bu sayede pilin hızlı bir şekilde tükenmesi önlenir. Bu nedenle, uygulamanız bir arka uç hizmetiyle mesajlaşma entegrasyonu gerektiriyorsa kendi kalıcı ağ bağlantınızı sürdürmek yerine mümkünse FCM'yi kullanmanızı önemle tavsiye ederiz.
FCM, Doze ve Uygulamayı Beklemeye Alma boşta kalma modlarıyla çalışacak şekilde optimize edilmiştir. FCM RemoteNotification mesaj türü, kullanıcıyla etkileşim kurmak için uygulamanızı uyandırmanıza olanak tanır. Doze veya Uygulamayı Beklemeye Alma 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 durumuna döndürür. Zamana duyarlı, kullanıcı tarafından görülebilen bildirimler için Doze modunda teslimatı etkinleştirmek üzere RemoteNotification mesaj türlerini kullanabilirsiniz. Bu mesajlar bildirimlere neden olabilir. Daha fazla bilgi için RemoteNotification ile ilgili
FCM kılavuzuna bakın.
Uygulama içeriğini arka planda güncel tutma veya veri senkronizasyonlarını başlatma gibi bildirimle sonuçlanmayan mesajlar için BackgroundSync FCM mesajlarını kullanın. Bu mesajlar kasıtlı olarak düşük önceliklidir ve cihaz pilini optimize etmek için geciktirilebilir veya kısıtlanabilir.
Genel bir en iyi uygulama olarak, uygulamanız aşağı akış mesajlaşma gerektiriyorsa FCM'yi kullanın. Uygulamanızda FCM kullanılıyorsa kullanıcıya yönelik bildirimlerle sonuçlanan mesajlar için RemoteNotification kullanıldığından emin olun.
RemoteNotification öğesini aşağıdaki durumlarda kullanmayın:
- Bildirimin kesinlikle gösterilmeyeceği durumlar.
- Yalnızca uygulama durumunu güncelleyen mesajların (ör. uygulama içeriğini arka planda güncel tutma veya veri senkronizasyonlarını başlatma) hemen teslim edilmesi için.
- Son kullanıcıdan izin isteme yöntemi olarak
Diğer kullanım alanları için destek
Neredeyse tüm uygulamalar; ağ bağlantısı, alarmlar, işler ve senkronizasyonları yöneterek ve FCM mesajlarını kullanarak Doze'u destekleyebilir. Dar bir kullanım alanı kümesi için bu yeterli olmayabilir. Bu gibi durumlarda sistem, Doze ve Uygulamayı Beklemeye Alma optimizasyonlarından kısmen muaf olan uygulamaların yapılandırılabilir bir listesini sunar.
Kısmen muaf olan bir uygulama, Doze ve Uygulamayı Beklemeye Alma sırasında ağı kullanabilir ve kısmi uyanık kalma kilitlerini tutabilir. Ancak diğer uygulamalarda olduğu gibi,
bu uygulama için de diğer kısıtlamalar geçerlidir. Örneğin, uygulamanın işleri ve senkronizasyonları API düzeyi 23 ve altında ertelenir ve normal AlarmManager alarmları çalmaz. Uygulamalar, isIgnoringBatteryOptimizations() yöntemini çağırarak muafiyet listesinde olup olmadıklarını kontrol edebilir.
Kullanıcılar, muaf tutulan uygulamaların listesini Ayarlar > Pil > Pil Optimizasyonu bölümünden manuel olarak yapılandırabilir. Alternatif olarak sistem, uygulamaların kullanıcılardan muafiyet istemesine olanak tanıyan yöntemler sunar:
- Çoğu uygulama,
ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGSiçeren bir intent çağırabilir. - Kabul edilebilir bir kullanım alanına uyan uygulamalar, kullanıcının uygulamayı sistem ayarlarına gitmeden doğrudan muafiyet listesine eklemesine olanak tanımak için
ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONSintent işlemini içeren bir intent çağırabilir.
Bir uygulama, isIgnoringBatteryOptimizations() yöntemini çağırarak şu anda muafiyet listesinde olup olmadığını kontrol edebilir.
Doze ve Uygulamayı Beklemeye Alma ile test etme
Kullanıcılarınıza mükemmel bir deneyim sunmak için uygulamanızı Doze ve Uygulamayı Beklemeye Alma modlarında tam olarak test edin.
Uygulamanızı Doze ile test etme
Doze modunu test etmek için aşağıdakileri yapabilirsiniz:
- Android 6.0 (API düzeyi 23) veya daha yeni bir sistem görüntüsüne 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 komutu çalıştırarak sistemi boşta moduna zorlayın:
$ adb shell dumpsys deviceidle force-idle - Hazır olduğunuzda aşağıdaki komutu çalıştırarak boşta modundan çıkın:
$ adb shell dumpsys deviceidle unforce - Aşağıdaki komutu çalıştırarak cihazı yeniden etkinleştirin:
$ adb shell dumpsys battery reset - Cihazı yeniden etkinleştirdikten sonra uygulamanızın davranışını gözlemleyin. Cihaz, Doze modundan çıktığında uygulamanın düzgün bir şekilde kurtarıldığından emin olun.
Uygulamanızı Uygulamayı Beklemeye Alma ile test etme
Uygulamanızda Uygulamayı Beklemeye Alma modunu test etmek için aşağıdakileri yapın:
- Android 6.0 (API düzeyi 23) veya daha yeni bir sistem görüntüsüne 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ı bekleme moduna zorlayın:
$ 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> - 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 intent işlemini kullanmasının kabul edilebilir olup olmadığı vurgulanmaktadır. Genel olarak, Doze veya Uygulamayı Beklemeye Alma özelliği uygulamanın temel işlevini bozmadığı ya da uygulamanızın FCM RemoteNotification mesajlarını kullanamaması için teknik bir neden olmadığı sürece uygulamanız bu istisnaları karşılamaz.
Daha fazla bilgi 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 telefon uygulaması. | Cihaz Uyku modundayken veya uygulama Uygulamayı Beklemeye Alma modundayken kullanıcılara gerçek zamanlı mesajların gönderilmesini gerektirir. | Evet, FCM kullanarak | Kabul Edilemez | Uygulamayı uyandırmak ve ağa erişmek için FCM RemoteNotification mesajlarını kullanın. |
Evet, ancak FCM RemoteNotification mesajlarını 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 Doze ve Uygulamayı Beklemeye Alma, uygulamanın temel işlevini bozuyor. | Kabul edilebilir | ||
| Güvenlik uygulaması. | Kullanıcılarını ve ailelerini güvende tutan uygulamalar. | Geçerliyse. | Kabul edilebilir | |
| Görev otomasyonu uygulaması. | Uygulamanın temel işlevi, anlık mesajlaşma, sesli arama veya yeni fotoğraf yönetimi gibi otomatik işlemleri planlamaktır. | Geçerliyse. | Kabul edilebilir | |
| Çevre birimi cihazı tamamlayıcı uygulaması. | Uygulamanın temel işlevi, çevre birimine internet erişimi sağlamak amacıyla çevre birimiyle kalıcı bir bağlantı sürdürmektir. | Geçerliyse. | Kabul edilebilir | |
| Uygulamanın, senkronizasyon için yalnızca belirli aralıklarla bir çevre birimine bağlanması veya yalnızca standart Bluetooth profilleri üzerinden bağlanan kablosuz kulaklık gibi cihazlara bağlanması gerekiyorsa. | Geçerliyse. | Kabul Edilemez |