Artan pil tüketimi — mobil uygulama kullanıcılarının en sık şikayetlerinden biridir. Uygulama anormal derecede yüksek enerji tüketmeye başlar ve cihazın arka planda bile hızlı bir şekilde boşalmasına neden olur. Google I/O 2023'e göre, Google Play'deki uygulamaların %30'a kadarı, kullanıcı tutmayı doğrudan etkileyen enerji tüketimi sorunlarına sahiptir. Bu makalede nedenleri, teşhisi ve optimizasyon yöntemlerini inceleyeceğiz.
Önemli Noktalar
Artan pil tüketimi, bir mobil uygulamanın tipik kullanım senaryolarında beklenenden önemli ölçüde daha fazla enerji tükettiği bir durumdur. Kullanıcı, bir uygulamayı yükledikten veya güncelledikten sonra cihazın %20-30 daha hızlı boşaldığını fark eder.
Modern mobil işletim sistemleri — Android ve iOS — enerji tüketimini kontrol etmek için yerleşik mekanizmalara sahiptir. Android Battery Optimization kullanırken, iOS Background Modes kullanır. Ancak API'lerin yanlış kullanımı bu mekanizmaları bypass edebilir.
Purdue University araştırmasına (2021) göre, uygulamaların yaklaşık %60'ı belirgin bir ihtiyaç olmadan arka plan görevleri için enerji tüketir. Bu özellikle reklam, analitik ve sürekli ağ bağlantısı olan uygulamalarda yaygındır.
Enerji tüketimi mA·h (miliamper-saat) cinsinden ölçülür. Android, her bileşenin tüketimini izleyen BatteryManager API'si aracılığıyla veri sağlar: CPU, radyo modülü, GPS, ekran ve sensörler.
val batteryManager = getSystemService(Context.BATTERY_SERVICE) as BatteryManager
val chargeCounter = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER)
val capacity = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY)
// chargeCounter / capacity * 100 = current charge percentage
BatteryManager API'si mevcut şarjı ve pil kapasitesini almanızı sağlar, ancak uygulama bazında ayrıntı sağlamaz — bunun için sistem yardımcı programları gerekir.
WakeLock — pil için en tehlikeli mekanizmadır. Bir uygulama WakeLock'u serbest bırakmadan tutarsa, cihaz uyku moduna geçmez. WakeLock'u bir saat tutmak yaklaşık 50-80 mA·h tüketir.
Gruplanmamış ağ istekleri ikinci en yaygın nedendir. Bir uygulama her ağ bağlantısı kurduğunda, radyo modülü güç tasarrufu modundan aktif moda geçer. 5 dakikadan az aralıklarla sık kısa istekler, radyo modülünü sürekli aktif tutar.
Yüksek hassasiyetli GPS konumu (GPS_PROVIDER), yaklaşık konumdan (NETWORK_PROVIDER) 10-15 kat daha fazla enerji tüketir. Arka planda sürekli konum güncellemeleri, kullanıcıların en yaygın şikayetlerinden biridir.
Android Developers Blog'a göre, ortalama bir uygulama cihazın toplam pil tüketiminin yaklaşık %15'ini tüketir. Bu seviyenin aşılması, zorunlu enerji tüketimi denetimi gerektirir.
Battery Historian — Google'ın enerji tüketimi analizi için resmi aracıdır. ADB'den BatteryStats dökümlerini alır ve tüketimi bileşenlere göre görselleştirir: CPU, Ağ, GPS, WakeLock ve Ekran.
Döküm oluşturmak için şu komutu çalıştırın: adb shell dumpsys batterystats. 2-3 saatlik normal kullanımdan sonra veri toplayarak, analiz için raporu Battery Historian'a yükleyebilirsiniz.
Android Energy Profiler, Android Studio'da enerji tüketimini gerçek zamanlı olarak izler. Her uygulama işlemi için CPU, Ağ, GPS ve Ekran tüketimini gösterir.
# Reset battery stats before test
adb shell dumpsys batterystats --reset
# Use the app for 2-3 hours
# Export dump for Battery Historian
adb shell dumpsys batterystats > batterystats_dump.txt
iOS için Xcode Instruments aracılığıyla Energy Log kullanılır. Modüle göre enerji tüketimi verilerini toplar: CPU, Ağ, GPU, Ekran, Konum. Okuma süresi: oturum analizi başına 15-30 dakika.
Fiziksel bir iOS cihazında, enerji tüketimi istatistikleri Settings > Battery bölümünde de gösterilir. Bir uygulama tüketimde ilk 10'da yer alıyorsa — bu optimizasyon için bir sinyaldir.
WorkManager — pil durumunu, ağı ve Doze modunu dikkate alan arka plan görevleri için standart API'dir. Görevi hemen değil, en uygun koşullar altında yürütmeyi garanti eder ve arka plan işlemlerinde %40'a kadar enerji tasarrufu sağlar.
val workRequest = OneTimeWorkRequestBuilder<SyncWorker>()
.setConstraints(
Constraints.Builder()
.setRequiresCharging(true)
.setRequiresBatteryNotLow(true)
.setRequiresNetworkType(NetworkType.CONNECTED)
.build()
)
.build()
WorkManager.getInstance(this).enqueue(workRequest)
İstek gruplama — birden fazla ağ işlemini tek bir iletişim oturumunda birleştirmektir. 10 ayrı istek yerine, uygulama tek bir toplu istek yaparak radyo modülünün aktif süresini 30 saniyeden 2-3 saniyeye düşürür.
Google Play Services'den FusedLocationProviderClient, gerekli doğruluğa göre en uygun konum kaynağını seçer. Arka plan görevleri için PRIORITY_BALANCED_POWER_ACCURACY önceliğini kullanın — bu, minimum pil tüketimiyle 100 metreye kadar doğruluk sağlar.
iOS'ta, Continuous Location yerine Significant Location Change kullanın. Bu, her birkaç saniyede bir değil, yalnızca önemli hareketlerde (500 metreden fazla) güncelleme almanızı sağlar.
Android Battery Historian — Google'ın BatteryStats verilerini görselleştirme web aracıdır. Döküm içe aktarma, renk kodlu bileşenler ve oturum karşılaştırmasını destekler. Temel metrikler: WakeLock tutma süresi, radyo modülü etkinliği, GPS oturumları.
Xcode Energy Organizer, TestFlight ve App Store aracılığıyla üretim kullanıcılarından enerji tüketimi verilerini toplar. Farklı cihazlarda ve iOS sürümlerinde ortalama tüketim hakkında bir rapor alırsınız. Bu, güncellemelerden sonra gerilemeleri izlemenizi sağlar.
PerfDog (Tencent) — enerji tüketimi ölçümlerini içeren çapraz platform performans test aracıdır. iOS ve Android'i destekler, saniyede 1-10 kare hızında metrik kaydetmeye izin verir.
| Araç | Platform | Metrikler |
|---|---|---|
| Battery Historian | Android | WakeLock, Ağ, GPS, CPU, Ekran |
| Energy Profiler | Android Studio | Gerçek zamanlı CPU, Ağ, GPS, Radyo |
| Energy Log | iOS (Xcode) | CPU, Ağ, GPU, Ekran, Konum |
| PerfDog | iOS + Android | Enerji, FPS, CPU, Bellek (hepsi birlikte) |
Apple WWDC 2023'e göre, Energy Organizer kullanımı, App Store'da yayınlamadan önce gerilemeleri belirleyip düzelterek ortalama uygulama enerji tüketimini %15-25 oranında azaltır.
Sıkça Sorulan Sorular
Sosyal ağlar ve mesajlaşma uygulamaları (Facebook, Instagram, WhatsApp, Telegram) geleneksel olarak enerji tüketiminde başı çeker. Sürekli veri senkronize eder, akışı günceller, push bildirimleri alır ve GPS kullanır. İkinci sırada, GPU ve CPU'yu aynı anda yükleyen ve aktif oyun süresi başına 400-600 mA·h'a kadar tüketen 3D grafikli oyunlar yer alır.
Evet, doğrudan etkiler. Ekran, bir akıllı telefonun en enerji yoğun bileşenidir. Frekansı 60 Hz'den 120 Hz'ye çıkarmak, ekranın enerji tüketimini %30-50 artırır. Ancak LTPO teknolojisine sahip modern ekranlar, içeriğe bağlı olarak frekansı 1 Hz'den 120 Hz'ye dinamik olarak değiştirerek pil üzerindeki etkiyi azaltır.
Yüksek hassasiyetli GPS sürekli çalışmada saatte yaklaşık 200-300 mA·h tüketir. Karşılaştırma için, Wi-Fi ve mobil baz istasyonları (NETWORK_PROVIDER) aracılığıyla konum belirleme aynı sürede yalnızca 20-40 mA·h tüketir. Yalnızca belirli bir alana girildiğinde GPS'i etkinleştirmek için Geofencing API'sini kullanın.
Hayır. Modern işletim sistemleri (Android ve iOS) arka plan işlemlerini kendileri optimize eder. Bir uygulamayı zorla kapatıp yeniden başlatmak, uygulamanın arka planda kalmasından daha fazla enerji tüketir. İstisna — açıkça sorunlara neden olan uygulamalardır (ayarlardaki pil istatistikleri aracılığıyla belirlenir).
Settings > Battery > Battery Usage bölümünü açın. Sistem, tüketim yüzdesiyle birlikte uygulamaların bir listesini gösterecektir. Ayrıntılı analiz için ADB kullanın: adb shell dumpsys batterystats ve dökümü Battery Historian'a yükleyin. Bu, yalnızca toplam tüketimi değil, aynı zamanda bileşenlere göre bir dökümü de (WakeLock, Ağ, GPS) gösterecektir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun