Arka plan güncellemelerinin etkisini azaltmak için bunların sıklığını değiştirdiğinizde ilgili güncellemeleri almak, mevcut pil seviyesini ve şarj durumunu kontrol etmek başlatabilirsiniz.
Uygulama güncellemelerinin yapılmasının pil ömrüne etkisi, pil seviyesine ve cihazın şarj durumu. Cihaz AC üzerinden şarj olurken güncelleme yapmanın etkisi Önemsiz olduğundan çoğu durumda, cihaz bağlıyken yenileme hızınızı en üst düzeye çıkarabilirsiniz duvara takılı bir şarj cihazına bağlayın. Buna karşılık, cihaz boşalıyorsa güncelleme hızınızı azaltarak pil ömrünü uzatır.
Benzer şekilde pilin şarj seviyesini kontrol ederek hatta şarjı bitmek üzereyken güncellemeler bile durdurulur.
Mevcut şarj durumunu belirleme
Geçerli ödeme durumunu belirleyerek başlayın. BatteryManager
tüm pil ve şarj ayrıntılarını
şunu içeren sabit bir Intent
içinde yayınlar:
şarj durumunu.
Niyet (yapışkan) olduğundan BroadcastReceiver
kaydetmeniz gerekmez. registerReceiver
öğesini çağırmanız yeterlidir.
Sonraki snippet'te gösterildiği gibi alıcı olarak null
, mevcut pil durumu niyeti
geri döndü. Buraya gerçek bir BroadcastReceiver
nesnesi aktarabilirsiniz, ancak
gerekli değildir, güncellemeleri sonraki bir bölümde ele alacağız.
Kotlin
val batteryStatus: Intent? = IntentFilter(Intent.ACTION_BATTERY_CHANGED).let { ifilter -> context.registerReceiver(null, ifilter) }
Java
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); Intent batteryStatus = context.registerReceiver(null, ifilter);
Hem mevcut şarj durumunu hem de cihaz şarj oluyorsa kullanıcının şarj olup olmadığını kontrol edebilirsiniz. USB veya AC şarj cihazıyla şarj oluyor:
Kotlin
val status: Int = batteryStatus?.getIntExtra(BatteryManager.EXTRA_STATUS, -1) ?: -1 val isCharging: Boolean = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL // How are we charging? val chargePlug: Int = batteryStatus?.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) ?: -1 val usbCharge: Boolean = chargePlug == BatteryManager.BATTERY_PLUGGED_USB val acCharge: Boolean = chargePlug == BatteryManager.BATTERY_PLUGGED_AC
Java
// Are we charging / charged? int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1); boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL; // How are we charging? int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB; boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
Genelde, cihazınızın arka plan güncellemelerinin oranını en üst düzeye çıkarmanız gerekir. Bunun için cihazınızın AC şarj cihazına bağlandığında, şarj USB üzerindenyse hızı azaltın ve devam edebilirsiniz.
Şarj durumundaki değişiklikleri izleme
Şarj durumu, bir cihaz fişe takılı olabileceği için kolayca değişebilir, dolayısıyla değişiklikleri görmek için şarj durumunu izleyin ve yenileme hızınızı buna göre değiştirin.
BatteryManager
, cihaz her bağlandığında veya
güç bağlantısı kesildi. Uygulamanız açık değilken bile bu etkinlikleri almanız
özellikle de bu etkinlikler uygulamanızı ne sıklıkta başladığınızı
Bir arka plan güncellemesi başlatın. Bu nedenle,BroadcastReceiver
Amaç filtresindeki ACTION_POWER_CONNECTED
ve ACTION_POWER_DISCONNECTED
.
<receiver android:name=".PowerConnectionReceiver"> <intent-filter> <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/> <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/> </intent-filter> </receiver>
Mevcut pil seviyesini belirleme
Bazı durumlarda, geçerli pil seviyesinin belirlenmesi de yararlı olur. Trafiğin zirve yaptığı saatleri, pil şarjı belirli bir seviyenin altında olduğunda arka plan güncelleme hızınızı.
Mevcut pil seviyesini çıkarıp pil durumunun amacı aşağıda gösterildiği gibidir:
Kotlin
val batteryPct: Float? = batteryStatus?.let { intent -> val level: Int = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) val scale: Int = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1) level * 100 / scale.toFloat() }
Java
int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1); float batteryPct = level * 100 / (float)scale;
Pil seviyesindeki önemli değişikliklere tepki verme
Pil durumunu sürekli olarak izleyemezsiniz, ancak bunu yapmanız gerekmez.
Genel anlamda, pil seviyesini izlemenin etkisi
pil üzerinde, uygulamanızın normal davranışından daha fazla etkisi olur. Örneğin, bir
Manifest dosyasındaki BroadcastReceiver
, pil azaldığında beklemedeki çalışmaları iptal eder
esasen pilin daha fazla tükenmesine neden olur (ve dolayısıyla
olduğundan
Android 8.0). Bunun yerine işin ne zaman yürütülmesi gerektiğini açıklayan iş kısıtlamaları sağlayabilirsiniz.
Bu da sistemin uygulamanızı başlatmadan önce karar vermesini sağlar.
Arka plan güncellemelerinizi pil seviyesi doluyken çalıştırmamak genellikle
kritik önem taşır. Telefon siz gelmeden kendi kendine kapanıyorsa verilerinizin ne kadar yeni olduğu önemli değildir
nasıl yararlanabileceğini belirleyin. Bunu yapmak için
WorkManager kitaplığını kullanma
şununla:
BatteryNotLow
kısıtlaması
pil seviyesi düşükse çalışmanın yapılmaması gerektiğini belirtmek için (geçerli
NetworkType
kısıtlama).
Çoğu durumda bir cihazın şarj edilmesi, yuvaya yerleştirilmesi ile tesadüfen gerçekleşebilir. Sonraki Bu ders, mevcut yuva durumunu nasıl belirleyeceğinizi ve cihazdaki değişiklikleri nasıl izleyeceğinizi gösterir yuvaya yerleştiriliyor.