Android, cihazın pil ömrünü iyileştirmek için cihaz kullanımını ve uyanıklığını izleyerek cihaz durumunu etkileyebilir. Platform, cihaz kullanılmadığında etkinliklerin çalışmasını duraklatmak için uyku durumuna girebilir.
Doz hakkında
Uyku modu, cihaz uzun süre kullanılmadığında uygulamanın arka plan CPU ve ağ etkinliğini erteleyerek pil ömrünü uzatır.
Uyku modundaki boş cihazlar, periyodik olarak bakım aralığına girer. Bu süre zarfında uygulamalar bekleyen işleri (senkronizasyonlar, işler vb.) tamamlayabilir. Daha sonra Uyku modu daha uzun süre uyku modunda kalır ve ardından başka bir bakım dönemi başlar. Platform, Doze uyku/bakım sırasını devam ettirerek en fazla birkaç saat uyku süresine ulaşılana kadar her seferinde boşta kalma süresini artırır. Uyku modundaki bir cihaz her zaman hareketi algılar ve hareket algılanırsa hemen Uyku modundan çıkar.
Android 7.0 ve sonraki sürümler, Doze'i kullanıcı hareket halindeyken bile cihaz ekranını her kapattığında daha hafif optimizasyonlar tetikleyecek şekilde genişletir. Bu sayede pil ömrü uzar.
Kritik sistem hizmetleri genellikle cihaz üreticileri tarafından Doze'den muaf olacak şekilde ayarlanır. Kullanıcılar, Ayarlar menüsünü kullanarak belirli uygulamaları Doze'den muaf tutabilir. Ancak uygulamaları muaf tutmak cihazın pilini tüketebilir. Doze, AOSP'de varsayılan olarak devre dışıdır. Doze'i etkinleştirmeyle ilgili ayrıntılar için Doz'u entegre etme başlıklı makaleyi inceleyin.
Uyku modu koşulları
Doze desteği için cihazda Firebase Cloud Messaging (FCM) gibi bir bulut mesajlaşma hizmetinin bulunması gerekir. Bulut mesajları gibi harici tetikleyici etkinlikler, cihaz Uyku modundayken uygulamaları geçici olarak uyandırarak çalışmasını sağlayabilir.
Tam Doze desteği için cihazda önemli hareket algılayıcı (SMD) da gereklidir. Ancak Android 7.0 ve sonraki sürümlerdeki hafif Doze modu için SMD gerekmez. Uyku modu, aşağıdaki özelliklere sahip bir cihazda etkinleştirilirse:
- SMD'si vardır, tam Doze optimizasyonları gerçekleşir (hafif optimizasyonlar dahildir).
- SMD'si yoktur, yalnızca hafif Doze optimizasyonları gerçekleşir.
Doz yaşam döngüsü
Doze, platform cihazın boşta olduğunu algıladığında başlar ve bir veya daha fazla çıkış ölçütü etkinliği gerçekleştiğinde sona erer.
Platform, bir cihazın boşta olduğunu aşağıdaki durumlarda algılar:
- Cihaz sabit (SMD kullanılıyor).
- Cihaz ekranı bir süre boyunca kapalı kalır.
Pil ile çalışan bir cihaz güç şarj cihazına takılıyken Uyku modu etkinleştirilmez.
Uyku modu sırasında
Platform, sistemi uyku durumunda tutmaya çalışır. Bakım aralığı sırasında normal işlemleri düzenli olarak devam ettirir ve ardından cihazı tekrar tekrar daha uzun süreler boyunca uykuya döndürür. Uyku sırasında aşağıdaki kısıtlamalar etkindir:
- Uygulamaların ağa erişmesine izin verilmez.
- Uygulama uyandırıcı kilitleri yoksayılır.
- Alarmlar erteleniyor. Alarm saati alarmları ve
setAndAllowWhileIdle()
kullanılarak ayarlanan alarmlar (Uyku modundayken uygulama başına 15 dakikada 1 ile sınırlıdır) hariçtir. Bu muafiyet, etkinlik hatırlatıcısı bildirimleri göstermesi gereken uygulamalar (Takvim gibi) içindir. - Kablosuz ağ taramaları yapılmaz.
SyncAdapter
senkronizasyonu veJobScheduler
işleri sonraki bakım dönemine kadar ertelendi.- SMS ve MMS mesajları alan uygulamalar, işleme işlemlerini tamamlayabilmeleri için geçici bir beyaz listeye eklenir.
Çık
Platform, aşağıdakileri algıladığında cihazı Uyku modundan çıkarır:
- Kullanıcının cihazla etkileşimi
- Cihaz hareketi
- Cihaz ekranı açılıyor
- Yaklaşan AlarmClock alarmı
Bildirimler, cihazın Doze modundan çıkmasına neden olmaz.
Android 7.0 ve sonraki sürümler, ekran kapalıyken ve cihaz boşta olmadan önce hafif bir uyku modu etkinleştirerek Doze'i genişletir.
Şekil 1. Hareketli ve sabit cihazlar için güç tasarrufu modları.
İşlem | Doz | Hafif Uyku |
---|---|---|
Tetikleyici | Ekran kapalı, pilde, sabit | Ekran kapalı, pilde (fişten çekilmiş) |
Zamanlama | Bakımla birlikte art arda artan dönemler | Bakım dönemleri içeren tekrarlanan N dakikalık dönemler |
Kısıtlamalar | Ağ erişimi, uyanma kilidi veya GPS/kablosuz tarama yok; alarmlar ve işler/senkronizasyonlar ertelendi | Ağ erişimi yok; bakım dönemleri hariç işler/senkronizasyonlar ertelendi |
Davranış | Yalnızca yüksek öncelikli push bildirim mesajları alınır | Alınan tüm gerçek zamanlı mesajlar (anlık mesajlar, aramalar vb.); yüksek öncelikli push bildirim mesajı geçici ağ erişimini etkinleştirir |
Çık | Hareket, ekran açık veya alarm saati alarmı | Ekran açık |
Uygulamayı Beklemeye Alma ile etkileşim
- Doz modunda geçirilen süre, uygulamayı beklemeye alma süresine dahil edilmez.
- Cihaz Uyku modundayken, boşta olan uygulamaların en az günde bir kez normal işlemleri gerçekleştirmesine izin verilir.
Doze'i entegre etme
Doze etkinleştirildiğinde, SENSOR_TYPE_SIGNIFICANT_MOTION
desteği sunan cihazlar tam Doze optimizasyonlarını (hafif optimizasyonlar dahil) gerçekleştirir. SMD'si olmayan cihazlar ise yalnızca hafif Doze optimizasyonlarını gerçekleştirir. Android, uygun Doze optimizasyonlarını otomatik olarak seçer ve tedarikçi firma yapılandırması gerekli değildir.
Bir cihazda Doze'i etkinleştirmek için:
- Cihazın bulut mesajlaşma hizmetinin yüklü olduğunu doğrulayın.
- Cihaz yer paylaşımı yapılandırma dosyasında
overlay/frameworks/base/core/res/res/values/config.xml
,config_enableAutoPowerModes
değerinitrue
olarak ayarlayın: AOSP'de bu parametre varsayılan olarak<bool name="config_enableAutoPowerModes">true</bool>
false
(Doze devre dışı) değerine ayarlanmıştır.
- Önceden yüklenmiş uygulama ve hizmetlerin:
- Enerji tasarrufu optimizasyon yönergelerini kullanın. Ayrıntılar için Uygulamaları test etme ve optimize etme başlıklı makaleyi inceleyin.
VEYA
- Doz ve Uygulamayı Beklemeye Alma'dan muaftır. Ayrıntılar için Uygulamaları muaf tutma başlıklı makaleyi inceleyin.
- Enerji tasarrufu optimizasyon yönergelerini kullanın. Ayrıntılar için Uygulamaları test etme ve optimize etme başlıklı makaleyi inceleyin.
- Gerekli hizmetlerin Doze'den muaf olduğunu onaylayın.
İpuçları
- Mümkünse aşağı akış mesajları için FCM'yi kullanın.
- Kullanıcılarınızın hemen bir bildirim görmesi gerekiyorsa FCM yüksek öncelikli mesajı kullanın.
- İlk mesaj yükü içinde yeterli bilgi sağlayın (sonraki gereksiz ağ erişimini önlemek için).
setAndAllowWhileIdle()
vesetExactAndAllowWhileIdle()
ile kritik alarmlar ayarlayın.
Uygulamaları test etme ve optimize etme
Tüm uygulamaları (özellikle önceden yüklü uygulamaları) Doze modunda test edin. Ayrıntılar için Doz ve Uygulamayı Beklemeye Alma ile test etme başlıklı makaleyi inceleyin.