Android 9, affectionately known as Android Pie, introduces a new battery management feature called App Standby Buckets. We discuss below how this may affect how users engage with your apps.
App Standby Buckets help prioritise apps’ requests for system resources. Depending on how users engage with an app, it will be placed in one of five priority buckets and Android will limit the device resources available to an app based on which bucket it is categorised in.
Apps are prioritised into bucket groups by the following characteristics:
- Working Set
These battery management changes in Android 9 do affect all apps. Developers who wish to understand which bucket an app would currently be categorised under can call the new method
In Android 9, Android dynamically assigns each app to a priority bucket and reassigns apps as needed. More active apps are assigned to buckets that give the apps higher priority, making more system resources available to the app.
In particular, the bucket determines how frequently the app’s jobs run, how often the app can trigger alarms and receive high-priority Firebase Cloud Messaging (FCM) messages. These restrictions apply only while the device is on battery power – not while the device is charging.
Below are brief descriptions of the five App Standby Buckets.
An app would fall into the Active bucket if the user is currently using the app. For example:
- The app has launched an activity
- The app is running a foreground service
- The app has a sync adapter associated with a content provider used by a foreground app
- The user clicks on a notification from the app
If an app is in the Active bucket, Android does not place any restrictions on the app’s jobs, alarms, or FCM messages.
2. Working Set
An app would be categorised in the Working Set bucket if it runs often, but is not currently active. For example, this would include a social media app that the user launches most days. An app can also be promoted to the Working Set bucket if it’s used indirectly.
If an app does fall under the Working Set category, Android imposes mild restrictions on its ability to run jobs and trigger alarms.
An app would be categorised in the Frequent bucket if it is used regularly, but not necessarily every day. For example, a workout tracking app that the user runs at the gym might be in the Frequent bucket.
If an app falls into the Frequent bucket, Android imposes stronger restrictions on its ability to run jobs and trigger alarms; and also imposes a cap on high-priority FCM messages.
An app is in the Rare bucket if it is not often used. For example, a loyalty app that the user only runs while they’re checking out their points balance may be in the Rare bucket.
If an app is in the Rare bucket, Android imposes strict restrictions on its ability to run jobs, trigger alarms, and receive high-priority FCM messages. The system also limits the app’s ability to connect to the internet.
Apps that have been installed but never run are assigned to the Never bucket. As a result, Android imposes severe restrictions on these apps.
Impact On Messaging
The introduction of App Standby Buckets is a welcome change to how Android manages batter power restrictions and has minor implications if marketers send Local Notifications or Geo-triggered messages to their audience.
Marketers can expect slight delays to their Local Notifications and Geo-triggered messages, depending on which bucket their app falls into.
All other message types, including Web Push, SMS, Interstitials and Inbox are unaffected by message delays or restrictions imposed by Android OS, regardless of what bucket an app falls into for the user.
Local Notifications would be impacted by Alarm delays if an app was categorised outside of the Active or Working Set buckets. If that were the case, Local Notifications could be delayed up to 2 hours.
In Android 8, some delays for region event firing were introduced, but would be further impacted by Alarm delays in Android 9.
If you are actively using Geo-triggered messages (either with geo-location or with beacons), be aware that a user running Android 9 wit your app in the background, will experience their device responding differently to geofencing events than earlier Android versions.
As a result, apps outside of the Active bucket could have Geo-triggered Messages delayed upwards of 2 hours.
We’ve outlined some best practices to follow below.
Modifying Bucket Preferences: Developers must not try to manipulate the system into putting an app into one bucket or another. Android’s bucketing methods can change and every device manufacturer could choose to write their own bucketing app with its own algorithm. Instead, it’s best to make sure an app behaves appropriately no matter which bucket it is in.
Apps With Multiple Packages: If your app is split across multiple packages, those packages may fall under different buckets and therefore have different access levels. We recommend testing your apps with the packages assigned to various buckets to make sure your app behaves as intended.
Capped Messages: Apps which fall into Frequent or Rare buckets have FCM messages capped at 10 and 5 per day, respectively. If you’re sending a high volume number of messages, OtherLevels encourages you to review your daily messaging frequency for push notifications and ensure they’re not currently exceeding those upper limits.
The good news is, unlike the updates in iOS 12, there is very little marketers need to change with their messaging strategy in Android 9. Overall, these are welcome changes by Android to ensure users get the most usage out of their smartphone battery.