Use Android vitals to improve your app's performance, stability, and size
Performance and stability are directly linked to positive ratings on Google Play. Fixing issues and preventing bad behaviors can lead to a better user experience, higher ratings, and more retained installers. Additionally, reducing your app size can improve installation rates and reduce uninstalls.
Why it works
Android vitals displays your app's performance metrics regarding stability, power, jank, startup times and permission denials. Tracking these metrics allows you to identify and fix bad app behaviors that directly affect the user experience. You'll also see when there's a sudden change in core vitals that indicates anomalies you should investigate, as well as benchmarks to help you compare your app's performance to that of similar apps or apps of your choice. Apps whose metrics are higher have greater promotability, which raises their ranking in Google Play Store searches. They also are more likely to be eligible for the New & Updated and Editor's Choice collections on Google Play, and to be nominated in the Google Play Awards.
- Stability | ANR rate: The percentage of users who experienced at least one application not responding (ANR) event during a daily session. ANRs are typically caused by deadlocks or slowness in UI thread and background processes (broadcast receivers).
- Stability | Crash rate: The percentage of users who experienced at least one crash event during a daily session. Crashes are often caused by unhandled exceptions, resource exhaustion, failed assertions, or other unexpected states.
- Render time | 16ms (60fps): The percentage of daily sessions where users experienced more than 50% of frames with a render time greater than 16 ms. User interactions with your app should run at 60 frames per second without any dropped or delayed frames.
- Render time | 700ms: The percentage of users who experienced more than 1 in a 1000 frames with a render time of greater than 700ms in a day. As above, long render times degrade user experience by causing your app to feel less smooth. Frames that take 700ms or longer to render are likely to cause your app to appear frozen to the user.
- Battery | Partial wake locks: The percentage of users who experienced at least one wake lock of more than one hour on a given day. Stuck partial wake locks prevent an idle device from sleeping and saving battery.
- Battery | Wakeups: The percentage of users who experienced more than 60 wakeups per hour since the device was fully charged. Frequent wakeups caused by alarms performing time-based operations outside the lifetime of your app will prevent an idle device from sleeping.
- Startup time: The percentage of sessions during which users experienced slow cold, warm, or hot startup times. Slow startups can be caused by a range of issues but usually indicate the execution of heavy workloads or complex logic when initializing the app.
- Permission denials: The percentage of daily permission sessions during which users deny permissions or select Never ask again. Permission denials may indicate that people are unclear why a permission is being requested or view the request as unnecessary or unreasonable.
- App Size: Track the download and on-device size of your app and compare these metrics to those of your peers. Also, see active user and uninstall metrics for devices with low storage. Get optimization suggestions on how to reduce your app’s size based on an analysis of your releases.
- Think about bad behaviors and eradicate them: During the development of your app, think about how it would behave in different environments. For instance, if you are testing your app on a high-end, full-featured device, think about how it would perform on a low-end device with limited power, memory, bandwidth, and CPU/GPU capability. Use pre-launch reports to test your app on a broader set of devices before each release.
- Check Android vitals after releasing a new app version: After you've published your app, Android vitals will provide metrics on the performance of your app on production devices in the real world. This allows you to identify issues and bad behaviors that affect users on specific devices and Android versions.
- Identify problem devices: Your app may only exhibit bad behaviors on a specific device or set of devices. Depending on the severity of the impact to the user experience and the number of devices and users affected, you can choose to update your app's Device Targeting to exclude those devices until a fix is available.
Identify problem Android versions: Your app may only exhibit bad behaviors on specific Android versions. For older Android versions representing a small number of users, either update your app to eliminate the bad behavior or update the
android:minSdkVersionattribute of the
<uses-sdk>element in your app's Manifest to an API level where your app doesn't exhibit any bad behaviors. For newer Android versions, always update your app to fix the bad behaviors rather than setting the
android:maxSdkVersionattribute of the
<uses-sdk>element to exclude them.
- Use crash reporting tools to identify and trace crashes and ANRs: Use crash reporting tools, such as Firebase Crash Reporting or Crashlytics, and Android Studio debugging to identify and trace as many scenarios as possible that lead to crashes and ANRs.
- Use JobScheduling APIs to avoid wake locks and wakeups: Use JobScheduling APIs such as JobScheduler to intelligently schedule background processes and tasks. Doing so allows the platform to better manage its idle state to save battery life.
- Use FrameMetrics APIs to identify slow render times: Use FrameMetrics to measure high-granularity, per-interaction frame render times for devices in production. This allows you to identify specific interactions or events that are causing jank on production devices, rather than relying on test devices connected via USB.
- Follow the best practices for permission requests: Educate the user before requesting a permission and make sure they'll benefit from the permission immediately. Help users undo permission denials, and also make sure that users have the right settings enabled for your app to work.
- Use pre-launch reports to test your app on real devices and identify and fix issues before you publish your update.
- Switch to using Android App Bundles to take advantage of a more efficient way to build and release your app that offers app size reduction without needing to refactor your code.