Slide 1

Slide 1 text

Doze Mode & App Standby in Android M David Vávra, GDE +David Vávra @destil

Slide 2

Slide 2 text

Why?

Slide 3

Slide 3 text

Doze mode Triggered when: not charging && stationary && screen is off

Slide 4

Slide 4 text

App Standby Per-app Doze App is in standby when: no Activities && no notifications && not charging App is woken once a day for a brief time

Slide 5

Slide 5 text

Android Scheduling APIs SyncManager

Slide 6

Slide 6 text

Doze Mode SyncManager no wakelocks no network 10 s of network & wakelock, only once in 15 mins Device exits Doze

Slide 7

Slide 7 text

App Standby SyncManager wakelocks work no network

Slide 8

Slide 8 text

The golden ticket High-priority GCM message. But: Doesn’t work offline. You might use different provider (Parse, SIP) No SLA

Slide 9

Slide 9 text

Opting out partial wakelock for Doze, no App Standby Intent intent = new Intent(Settings. ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS); intent.setData(Uri.parse("package:com.example.app")); startActivity(intent); Intent intent = new Intent(Settings. REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); intent.setData(Uri.parse("package:com.example.app")); startActivity(intent); android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS Only valid use-cases! Break core feature, can’t use GCM

Slide 10

Slide 10 text

Testing $ adb shell dumpsys battery unplug $ adb shell dumpsys deviceidle step $ adb shell am set-inactive true $ adb shell am get-inactive

Slide 11

Slide 11 text

More details Detect whether the device is in Doze with PowerManager#isDeviceIdleMode() Detect is your app is whitelisted with isIgnoringBatteryOptimizations(String package) If you schedule more alarms, they are all triggered after exiting Doze. Doze/App Standby doesn’t work on devices without Google Play Services.

Slide 12

Slide 12 text

More details Maintenance windows: 5-10 mins, period 1, 2, 4, 6, 6, 6 hours. ContentProviders in the dozed app should work. Doze disables before user is woken by alarm clock to let apps synchronize. Apps with foreground service are not affected by Doze. You can register to android.os.action. DEVICE_IDLE_MODE_CHANGED

Slide 13

Slide 13 text

But… that will break my app! Use-cases & solutions

Slide 14

Slide 14 text

Use-case #1: Instant Messenger The app should notify me instantly when I receive a new message. Solution: High-priority GCM message. or white-listing

Slide 15

Slide 15 text

Use-case #2: SMS Manager The app should notify about incoming SMS immediately. Solution: Some Broadcasts like SMS_RECEIVED works.

Slide 16

Slide 16 text

Use-case #3: Sleep Tracker The app should monitor user’s sleep using accelerometer and microphone. Solution: Ask user to plug it into charger Whitelist & Foreground service & Wakelock (buggy)

Slide 17

Slide 17 text

Use-case 4#: Periodic Backup The app should backup user’s photos periodically to the cloud. Solution: GCM Network Manager with network & charge requirement Foreground service for downloading

Slide 18

Slide 18 text

Use-case #5: Podcast Downloader The app should download subscribed podcasts at night so they are ready for offline listening when I drive to work. Solution: GCM Network Manager with network requirement Foreground service for downloading Reschedule if fails

Slide 19

Slide 19 text

Use-case #6: Anti-Theft The app should be invisible and should allow remove control of the device. Solution: Whitelisting Use high-priority GCM & SMS to control device

Slide 20

Slide 20 text

Sources https://developer.android.com/preview/features/power-mgmt.html https://developers.google.com/cloud-messaging/network-manager https://commonsware.com/blog/2015/06/03/random-musing-m-developer- preview-ugly-part-one.html https://plus.google.com/+AndroidDevelopers/posts/GdNrQciPwqo https://plus.google.com/u/0/+TomasHubalek/posts/NXZdkR29h9m https://code.google.com/p/android-developer-preview/issues/detail?id=2233

Slide 21

Slide 21 text

We welcome talented Android Developers To Prague - nice relocation package :) http://avast.jobs.cz or ping me at [email protected]

Slide 22

Slide 22 text

Q&A +David Vávra @destil