Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Doze Mode & App Standby in Android M

David Vávra
November 13, 2015

Doze Mode & App Standby in Android M

Android Marshmallow brings major changes to the platform which can limit functionality of existing apps. If you are doing any background work in your app, your app will be affected by Doze &App Standby in favour of longer battery life. Let’s see what APIs will be limited and what are the best practices for scheduling background tasks.

David Vávra

November 13, 2015

More Decks by David Vávra

Other Decks in Programming


  1. 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
  2. Doze Mode SyncManager no wakelocks no network 10 s of

    network & wakelock, only once in 15 mins Device exits Doze
  3. The golden ticket High-priority GCM message. But: Doesn’t work offline.

    You might use different provider (Parse, SIP) No SLA
  4. 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
  5. Testing $ adb shell dumpsys battery unplug $ adb shell

    dumpsys deviceidle step $ adb shell am set-inactive <packageName> true $ adb shell am get-inactive <packageName>
  6. 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.
  7. 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
  8. 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
  9. Use-case #2: SMS Manager The app should notify about incoming

    SMS immediately. Solution: Some Broadcasts like SMS_RECEIVED works.
  10. 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)
  11. 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
  12. 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
  13. 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