On this page
A feature-complete app can still fail if it stutters while scrolling, takes too long to open, or freezes and triggers an Application Not Responding (ANR) dialog. Performance testing is the practice of measuring those behaviors on real builds and real devices, before your users experience them. This guide covers what to measure, the tools for each signal, and how to fold the results into your release process.
What to measure
Performance is not one number. Break it into signals you can measure independently, because each one has a different cause and a different fix.
| Signal | What it tells you | Where to measure |
|---|---|---|
| Cold start time | How long the app takes from launch icon to first interactive frame | adb shell am start -W, Macrobenchmark |
| Frame rendering | Whether UI work finishes in time or stutters while scrolling | JankStats, Macrobenchmark, GPU rendering bars |
| ANRs | The main thread blocked so long the system shows App Not Responding | Play Console Android vitals, logcat ANR traces |
| Memory growth | Objects retained after you leave a screen, a classic leak sign | Android Studio Memory Profiler |
| Network transfer | Bytes and requests each screen makes on launch and refresh | Network Inspector in Android Studio |
| Battery and wakeups | Background work that drains battery or wakes the device too often | Batterystats, Android vitals |
How to run the test pass
Measure a baseline on the release build
Performance numbers from a debug build are misleading because debugging adds overhead. Profile the same signed release build you plan to upload, on a device that matches your users.
Capture cold start and warm start
Launch the app from a forced stop and record the reported total time with adb shell am start -W. Repeat several times and keep the device in a consistent state between runs so the numbers are comparable.
Exercise the heavy screens
Scroll long lists, open image-heavy detail pages, and run the flows that touch the network. Watch frame timing in Android Studio and note any screen where work lands on the main thread.
Loop for memory leaks
Open and close the same screen repeatedly while watching the Memory Profiler. Heap usage that keeps climbing instead of settling down usually means a reference is being held after the screen is gone.
Test under real conditions
Repeat the pass with a weak network profile, battery saver enabled, and the app returning from the background. Slow conditions expose problems that a fast office network hides completely.
ANRs deserve their own attention
An ANR happens when the main thread is blocked long enough for the system to declare the app unresponsive, commonly while handling a touch event or running a long broadcast. Android's documentation explains the triggers, and Play Console's Android vitals reports how often production users hit them. When you see an ANR, the stack trace in the trace file points at whatever the main thread was doing at that moment.
Once the pass is done, the work is not finished. Android vitals keeps watching crashes and ANRs for every production release, which is how you learn whether a performance fix actually held. Teams that want this measured on a device matrix without building it in house can hand the pass to AppsTestLab as part of a wider Android App Testing engagement.
Frequently asked questions
Frequently asked questions
Do I need physical devices for performance testing?
Emulators are useful for repeatable Macrobenchmark runs, but CPU, thermal, and storage behavior varies on hardware. Use at least one real low-end device, because that is where jank and long startups show up first.
How is performance testing different from functional testing?
Functional testing asks whether the feature works. Performance testing asks whether it works fast and smoothly enough to keep using. A checkout can be functionally correct and still fail users if each screen takes several seconds to render.
Sources & references
Official Google documentationThese links open Google's official Play Console Help pages used to verify this guide. AppsTestLab guidance is independent and not affiliated with Google.
Get help doing this
