เมื่อคุณปรับความถี่ในการอัปเดตพื้นหลังเพื่อลดผลกระทบของการอัปเดตเหล่านั้น การอัปเดตอายุการใช้งานแบตเตอรี่ การตรวจสอบระดับแบตเตอรี่ปัจจุบันและสถานะการชาร์จก็เหมาะที่จะ เริ่ม
ผลกระทบต่ออายุการใช้งานแบตเตอรี่ของการอัปเดตแอปพลิเคชันจะขึ้นอยู่กับระดับแบตเตอรี่และ สถานะการชาร์จของอุปกรณ์ ผลกระทบของการอัปเดตขณะอุปกรณ์ชาร์จผ่าน AC ไม่มีนัยสำคัญ ดังนั้นในกรณีส่วนใหญ่ คุณสามารถเพิ่มอัตราการรีเฟรชสูงสุดได้เมื่อใดก็ตามที่อุปกรณ์มีการเชื่อมต่อ กับที่ชาร์จแบบเสียบผนัง ในทางกลับกัน หากอุปกรณ์คายประจุ การลดอัตราการอัปเดตจะช่วยได้ ยืดอายุการใช้งานแบตเตอรี่
ในทำนองเดียวกัน คุณสามารถตรวจสอบระดับการชาร์จแบตเตอรี่ ซึ่งอาจลดความถี่ หรือ แม้แต่การหยุด—การอัปเดตของคุณเมื่อแบตเตอรี่ใกล้หมด
ระบุสถานะการชาร์จปัจจุบัน
เริ่มต้นด้วยการระบุสถานะการชาร์จปัจจุบัน BatteryManager
จะประกาศรายละเอียดแบตเตอรี่และการชาร์จทั้งหมดใน Intent
แบบติดหนึบที่มี
สถานะการชาร์จ
เนื่องจากเป็น Intent แบบติดหนึบ คุณจึงไม่จำเป็นต้องลงทะเบียน BroadcastReceiver
เพียงเรียกใช้ registerReceiver
ที่ส่งใน
null
เป็นผู้รับดังที่แสดงในข้อมูลโค้ดถัดไป Intent ของสถานะแบตเตอรี่ปัจจุบันคือ
ส่งคืนแล้ว คุณสามารถส่งผ่านวัตถุ BroadcastReceiver
จริงที่นี่ แต่
เราจะจัดการการอัปเดตในส่วนภายหลัง ดังนั้นคุณจึงไม่จำเป็นต้องจัดการ
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);
คุณสามารถดึงข้อมูลทั้งสถานะการชาร์จปัจจุบัน และตรวจสอบว่ากำลังชาร์จอุปกรณ์อยู่หรือไม่ กำลังชาร์จผ่านที่ชาร์จ USB หรือ AC
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;
โดยทั่วไปแล้ว คุณควรเพิ่มอัตราการอัปเดตในเบื้องหลังให้ได้สูงสุดในกรณีที่อุปกรณ์ เชื่อมต่อกับที่ชาร์จ AC อยู่ ให้ลดอัตราดังกล่าวหากชาร์จผ่าน USB และทำให้อุปกรณ์ต่ำลง ต่อไปหากแบตเตอรี่หมด
ตรวจสอบการเปลี่ยนแปลงสถานะการชาร์จ
สถานะการชาร์จเปลี่ยนแปลงได้ง่ายพอๆ กับเมื่อเสียบปลั๊กอุปกรณ์ ดังนั้น สิ่งสำคัญคือ ตรวจสอบสถานะการชาร์จเพื่อดูการเปลี่ยนแปลงและปรับอัตราการรีเฟรชให้สอดคล้องกัน
BatteryManager
จะประกาศการดำเนินการเมื่อมีอุปกรณ์เชื่อมต่อ หรือ
ถูกตัดการเชื่อมต่อจากแหล่งจ่ายไฟ คุณต้องรับเหตุการณ์เหล่านี้แม้ว่าแอปจะไม่อยู่
โดยเฉพาะเนื่องจากเหตุการณ์เหล่านี้น่าจะส่งผลต่อความถี่ที่คุณเริ่มต้นแอป
เริ่มการอัปเดตเบื้องหลัง ดังนั้นคุณควรลงทะเบียน BroadcastReceiver
ในไฟล์ Manifest เพื่อฟังทั้ง 2 เหตุการณ์โดยกำหนด
ACTION_POWER_CONNECTED
และACTION_POWER_DISCONNECTED
ภายในตัวกรอง Intent
<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>
ดูระดับแบตเตอรี่ปัจจุบัน
ในบางกรณี การระบุระดับแบตเตอรี่ในปัจจุบันก็มีประโยชน์เช่นกัน คุณอาจเลือกลด อัตราการอัปเดตในเบื้องหลังหากการชาร์จแบตเตอรี่ต่ำกว่าระดับที่กำหนด
คุณดูการชาร์จแบตเตอรี่ปัจจุบันได้โดยดูระดับแบตเตอรี่ปัจจุบันและสเกลจาก ความตั้งใจของสถานะแบตเตอรี่ดังที่แสดงที่นี่
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;
ตอบสนองต่อการเปลี่ยนแปลงที่สำคัญในระดับแบตเตอรี่
คุณไม่สามารถติดตามสถานะของแบตเตอรี่อย่างต่อเนื่องได้ง่ายๆ แต่ไม่จำเป็น
โดยทั่วไปแล้ว ผลจากการตรวจสอบระดับแบตเตอรี่จะมี
ส่งผลต่อแบตเตอรี่มากกว่าการทำงานปกติของแอปคุณ ตัวอย่างเช่น การลงทะเบียน
BroadcastReceiver
ในไฟล์ Manifest เพื่อยกเลิกงานที่รอดำเนินการเมื่อแบตเตอรี่เหลือน้อยจะ
จะใช้แบตเตอรี่ให้หมดเร็วยิ่งขึ้น (ดังนั้น
เป็นไปไม่ได้ตั้งแต่
Android 8.0) แต่คุณสามารถระบุข้อจำกัดเกี่ยวกับงานที่อธิบายเวลาที่ควรมีการเรียกใช้ได้
เพื่อให้ระบบตัดสินใจได้โดยไม่ต้องเริ่มแอป
แนวทางปฏิบัติที่ดีคือไม่เรียกใช้การอัปเดตในเบื้องหลังเมื่อแบตเตอรี่เหลือ
ต่ำมาก ไม่ว่าข้อมูลของคุณจะใหม่แค่ไหนหากโทรศัพท์ปิดเองก่อนที่คุณจะ
ก็ใช้ประโยชน์จากสิ่งนี้ได้ วิธีการคือ
ใช้ไลบรารี WorkManager
ด้วย
ข้อจำกัด BatteryNotLow
เพื่อระบุว่าไม่ควรเรียกใช้งานหากแบตเตอรี่เหลือน้อย (นอกเหนือจากข้อมูลที่เกี่ยวข้อง
ข้อจำกัด NetworkType
)
ในหลายกรณี การชาร์จอุปกรณ์จะเกิดขึ้นพร้อมกับการใส่อุปกรณ์ลงในแท่นชาร์จ ถัดไป บทเรียนแสดงวิธีระบุสถานะแท่นชาร์จปัจจุบันและวิธีตรวจสอบการเปลี่ยนแปลงในอุปกรณ์ กำลังเชื่อมต่อ