백그라운드 업데이트 빈도를 변경하여 업데이트의 영향을 줄이면 배터리 수명 업데이트, 현재 배터리 수준 및 충전 상태 확인은 시작합니다
애플리케이션 업데이트 수행이 배터리 수명에 미치는 영향은 배터리 수준과 충전 상태를 나타냅니다. 기기가 AC 전원으로 충전되는 동안 업데이트 수행의 영향 무시할 수 있는 정도이므로 대부분의 경우 기기가 연결되어 있을 때마다 화면 재생 빈도를 최대화할 수 있음 벽면 충전기에 연결할 수도 있습니다 반대로 기기가 방전되고 있는 경우에는 업데이트 비율을 낮추는 것이 좋습니다. 배터리 수명을 연장할 수 있습니다.
마찬가지로 배터리 충전 수준을 확인하여 배터리 충전 빈도를 줄일 수도 있습니다. 배터리 충전량이 거의 소진되었을 때 업데이트를 계속할 수 있습니다.
현재 충전 상태 확인
현재 충전 상태를 확인하는 작업부터 시작합니다. BatteryManager
고정 Intent
에 모든 배터리 및 충전 세부정보를 브로드캐스트합니다.
충전 상태를 확인할 수 있습니다.
고정 인텐트이므로 BroadcastReceiver
를 등록할 필요가 없습니다. 간단히 registerReceiver
를 호출하여
null
를 수신기로 사용하는 경우 현재 배터리 상태 인텐트는 다음과 같습니다.
반환합니다. 여기서 실제 BroadcastReceiver
객체를 전달할 수도 있지만
이후 섹션에서 업데이트를 처리할 것이므로 필요하지 않습니다.
Kotlin
val batteryStatus: Intent? = IntentFilter(Intent.ACTION_BATTERY_CHANGED).let { ifilter -> context.registerReceiver(null, ifilter) }
자바
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
자바
// 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
를 등록하여 두 이벤트를 수신 대기하려면
인텐트 필터 내의 ACTION_POWER_CONNECTED
및 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>
현재 배터리 수준 확인
현재 배터리 수준을 확인하는 것이 유용할 때도 있습니다. 원하는 경우 배터리 충전량이 특정 수준 미만일 때 백그라운드 업데이트 비율을 조정할 수 있습니다.
다음에서 현재 배터리 수준과 크기를 추출하여 현재 배터리 충전 상태를 확인할 수 있습니다. 배터리 상태 인텐트를 업데이트합니다.
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() }
자바
int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1); float batteryPct = level * 100 / (float)scale;
배터리 수준의 급격한 변화에 반응하기
배터리 상태를 지속적으로 모니터링하는 일은 어렵지만 그리할 필요가 없습니다.
일반적으로 배터리 수준을 모니터링하는 것은
배터리에 미치는 영향이 더 클 수 있습니다. 예를 들어
배터리가 부족할 때 대기 중인 작업을 취소하는 매니페스트의 BroadcastReceiver
가
주로 배터리를 더 소모하는 역할을 하며 (따라서
이후에는 불가능했던
Android 8.0). 대신 작업이 언제 실행되어야 하는지 설명하는 제약 조건을 제공할 수 있습니다.
시스템이 앱을 시작하는 데 전력을 들이지 않고도 결정을 내릴 수 있게 해줍니다.
일반적으로 배터리가 충전 중일 때는 백그라운드 업데이트를 실행하지 않는 것이 좋습니다.
매우 낮습니다. 내가 사용하기 전에 휴대전화가 꺼지면 데이터가 얼마나 최신인지는 중요하지 않음
활용할 수 있습니다 이렇게 하려면
WorkManager 라이브러리 사용
다음으로
BatteryNotLow
제약조건
를 사용하여 배터리가 부족할 경우 작업을 실행하면 안 된다는 것을 지정합니다 (관련 작업 외에도
NetworkType
제약 조건).
대부분 기기를 충전하는 동작은 기기를 도킹하는 것과 동시에 일어납니다. 다음 현재 도크 상태를 확인하고 기기의 변경사항을 모니터링하는 방법을 보여주는 과정 도킹할 수 있습니다.