Table of Contents

Building Battery-Conscious Apps

Das ist mein Konspekt von dem Online-Kurs Android Development: Building Battery-Conscious Apps

Introduction

Why be battery conscious?

…

1. Basics of Battery Usage

Principles of battery-concious apps

https://www.linkedin.com/learning/android-development-building-battery-conscious-apps/principles-of-battery-conscious-apps

Wake-Up has costs:

Official documentation: http://developer.android.com/topic/performance/power/#lazy

Smart Design (aka Lazy First design)

  1. Reduce (e.g. resolution of photos for upload/download)
  2. Defer
  3. Coalesce (combining transactions to a “batch”)
  4. Rethink

2. Battery Drain and Workarounds

Considerations for using AlarmManager

https://www.linkedin.com/learning/android-development-building-battery-conscious-apps/considerations-for-using-alarmmanager

Pitfalls of poor AlarmManager usage

https://www.linkedin.com/learning/android-development-building-battery-conscious-apps/pitfalls-of-poor-alarmmanager-usage

  1. Background network operations (AlarmManager does not have intelligent dispatch logic)
  2. Alarms does not survive reboots (Extra logic required, e.g. BroadcastReceiver)
  3. Exact Alarm may not be exact
    • Since Kitkat
    • setExactAndAllowWhileIdle → is affected by Doze Mode
  4. Doze Mode introduces complexity (e.g. setExact can drift)

Takeaways:

Considerations for using background-started services

https://www.linkedin.com/learning/android-development-building-battery-conscious-apps/considerations-for-using-background-started-services

Pitfalls of poor background-started service usage

https://www.linkedin.com/learning/android-development-building-battery-conscious-apps/pitfalls-of-poor-background-started-service-usage

A review of broadcast receivers

https://www.linkedin.com/learning/android-development-building-battery-conscious-apps/a-review-of-broadcast-receivers

Registering a broadcast receiver

https://www.linkedin.com/learning/android-development-building-battery-conscious-apps/registering-a-broadcast-receiver

Triggering a broadcast receiver

https://www.linkedin.com/learning/android-development-building-battery-conscious-apps/triggering-a-broadcast-receiver

Two posibilities to trigger a broadcast receiver:

  1. Call implicit trigger
    • Candidates matched via filter
    • Recipients unknown until match
    • Recipients may change
  2. Explicit trigger
    • Invocation via code
    • Recipients known
    • Recipients never change

Example of triggering explicitly:

Intent i = new Intent("my.action.name")
                .setComponent(new ComponentName(context.getPackageName(), className));
context.setBroadcast(i);

Considerations of static implicit broadcast receivers

https://www.linkedin.com/learning/android-development-building-battery-conscious-apps/considerations-of-static-implicit-broadcast-receivers

Post Scriptum

This post scriptum is not based on the online course, but on other articles.

Intent to the settings, where you can move your app to the whitelist

From Android Battery Optimization for Avoiding Doze Mode and App Standby

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    Intent intent = new Intent();
    String packageName = getPackageName();
    PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
    if (!pm.isIgnoringBatteryOptimizations(packageName)) {
        intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
        intent.setData(Uri.parse("package:" + packageName));
        startActivity(intent);
    }
}