Mobile App Performance Optimization: What Should You Monitor?

A mobile app performs beautifully on the development team's latest phones.

Startup is quick, scrolling is smooth and important screens respond almost immediately. The release passes QA and goes to production.

A week later, the picture looks very different.

Users with older Android devices report that the app sometimes freezes after login. Customers on weaker mobile networks wait several seconds for an important screen to populate. One iPhone model shows unusually high memory use, while another segment experiences slow startup after upgrading the operating system.

Nothing in the development environment clearly predicted those problems.

That is one of the fundamental challenges of mobile performance: the application does not run in one environment.

It runs across different processors, memory limits, operating-system versions, screen refresh rates, battery conditions, storage states and network qualities. Optimizing performance therefore requires monitoring what happens on real devices, not relying only on laboratory testing or one headline metric.

Android's current performance guidance explicitly emphasizes monitoring performance where it matters most—in production—and covers startup, rendering, memory, battery and application stability among the major areas teams should inspect. Apple's MetricKit similarly exposes production metrics for launch time, hangs, animation hitching, CPU, memory, disk and network activity from real devices.

For Levelworks, this is primarily the Performant dimension of App Health, strengthened by Observable. A mobile app is much easier to optimize when the team can identify which users, devices and workflows are actually experiencing degraded performance.

Do not monitor “mobile performance” as one number

Performance is multidimensional.

An app can launch quickly but freeze during interaction. Another may scroll smoothly while consuming excessive memory and eventually being terminated by the operating system. A third can perform perfectly on Wi-Fi but become painfully slow on cellular networks because it transfers too much data.

A useful mobile performance monitoring model therefore separates at least:

  1. startup;
  2. responsiveness and rendering;
  3. crashes and hangs;
  4. memory;
  5. CPU and battery;
  6. network performance;
  7. critical user journeys;
  8. device and operating-system segments.

The objective is not to collect every available metric.

It is to know which part of the mobile experience becomes unhealthy when users say the app feels slow.

1. Monitor app startup time

Startup is one of the first performance signals a mobile user experiences.

Measure different startup conditions where the platform makes the distinction.

On Android, these commonly include:

  • cold start — the app process does not already exist;
  • warm start — some process state remains but the activity needs recreation;
  • hot start — the process and activity can return quickly.

Android vitals currently uses Time to Initial Display (TTID) for startup monitoring. Google Play considers startup excessive at 5 seconds or more for cold starts, 2 seconds or more for warm starts, and 1.5 seconds or more for hot starts. These are excessive-behaviour thresholds rather than recommended performance targets; teams should generally aim well below them where the application experience permits. Android Developers: App Startup Time

On Apple platforms, MetricKit exposes measures including Time to First Draw, optimized time to first draw, app-resume time and extended-launch activity. Apple: MetricKit

Watch distributions rather than only average launch time.

If most users start the app in one second but a particular device family regularly takes four seconds, the average may hide the group that needs attention.

Segment startup by:

  • device model;
  • OS version;
  • app version;
  • cold vs warm conditions where available.

A regression immediately following a release is particularly useful because it gives engineering a smaller search area.

2. Monitor responsiveness, hangs and rendering smoothness

An app that launches quickly can still feel slow every time the user touches it.

On mobile, responsiveness means the UI thread or main thread remains available to process interaction and rendering rather than being occupied by excessive computation, blocking I/O or another long task.

Apple's responsiveness guidance suggests keeping synchronous main-thread work following a discrete user interaction below roughly 100 milliseconds and keeping continuous-interaction work within the display refresh interval where possible. It also distinguishes hangs, where interaction stops responding, from hitches, where animation or scrolling becomes visually uneven. Apple: Improving App Responsiveness

MetricKit provides hang and hitch metrics for production monitoring, while Android provides tools and production signals for slow rendering and Application Not Responding events.

Useful signals include:

  • hang frequency;
  • ANR rate on Android;
  • slow or frozen frames;
  • animation hitching;
  • interaction latency;
  • responsiveness of specific critical screens.

Do not treat scrolling smoothness as merely cosmetic.

If scrolling, typing or tapping repeatedly stalls, users experience the application as slow even when every backend API response is fast.

3. Monitor crashes and ANRs separately

Crashes and poor performance overlap, but they tell different stories.

A crash ends the application process unexpectedly.

An Android Application Not Responding (ANR) event occurs when the app remains alive but cannot respond appropriately because, for example, the main thread is blocked.

Android documents several ANR conditions; one important example is input dispatch timing out when the app does not respond to user input within five seconds. Android Developers: ANRs

Both matter because users often describe them similarly:

The app froze.

It stopped working.

I had to close it.

Current Android vitals treats user-perceived crash rate and user-perceived ANR rate as core stability metrics.

Track them separately by:

  • app version;
  • device;
  • OS release;
  • screen or workflow where possible.

A release may improve overall performance while creating ANRs on one lower-memory device family. Aggregated metrics alone can miss that.

Crashes and ANRs are not purely performance metrics, but they are important boundaries: optimization has little value if the app becomes unstable under the same conditions.

4. Monitor memory pressure, not simply average memory

Memory behaviour matters much more on mobile than teams accustomed to large server environments sometimes expect.

Users run your app alongside the operating system and many other applications on devices with widely varying RAM.

On Android, excessive allocation can increase garbage collection, create rendering contention and ultimately contribute to out-of-memory termination. Android's performance documentation recommends profiling allocation behaviour, garbage collection and possible leaks rather than looking at only a single memory snapshot. Android Developers: Performance Measurement

Apple's MetricKit exposes memory-related information and diagnostics for situations in which an app or extension terminates after exceeding memory limits.

Useful memory monitoring includes:

  • typical memory footprint;
  • peak memory;
  • memory growth during long sessions;
  • repeated garbage collection;
  • out-of-memory termination;
  • memory behaviour by device tier;
  • unusually expensive screens or workflows.

Pay particular attention to growth that does not reverse.

If opening and closing the same image-heavy screen repeatedly causes memory usage to climb every time, you may have a leak or retained resources rather than simply a memory-intensive feature.

[Internal Link: “Why Is My App Slow? 10 Common Causes of Poor Application Performance”]

5. Track CPU usage in the context of the user journey

High CPU is not automatically bad.

An app performing image processing, encryption or another legitimate compute-heavy task may briefly need substantial processing capacity.

What matters is whether CPU work creates user-facing consequences.

Watch for:

  • high CPU during startup;
  • CPU spikes following user interaction;
  • prolonged CPU activity while idle;
  • expensive background processing;
  • CPU-heavy loops corresponding with thermal or battery issues.

Apple's MetricKit reports CPU time and instruction counts as part of its production performance metrics, allowing teams to track resource consumption alongside launch, responsiveness and other app-health signals.

CPU should therefore be interpreted alongside what the app was doing.

A five-second CPU spike while exporting a complex video means something very different from the same spike every time a user opens a simple settings screen.

6. Monitor battery and background activity

Performance optimization on mobile cannot ignore energy use.

An app may feel responsive while quietly consuming excessive battery through background network requests, location updates, repeated wake-ups or unnecessary computation.

That eventually becomes a user-experience problem.

Android's current guidance notes that repeated background mobile-network activity wakes the CPU and activates the cellular radio, increasing battery consumption. Google recommends tools such as system tracing, Macrobenchmark power metrics and the Power Profiler for investigating battery behaviour. Android Developers: Excessive Background Network Usage

Useful things to monitor include:

  • excessive background execution;
  • repeated network activity while the app is backgrounded;
  • CPU work continuing after the relevant screen closes;
  • wake-lock behaviour on Android;
  • energy use by important workflows where platform tooling exposes it.

Do not optimize battery by simply disabling useful background functionality.

The purpose is to identify unnecessary activity and reduce work that does not provide corresponding user value.

7. Monitor network request performance from the device

A mobile application is only as fast as the network path behind many of its screens.

Monitor:

  • request duration;
  • failure rate;
  • request size;
  • response size;
  • endpoint;
  • network conditions where available.

Firebase Performance Monitoring, for example, automatically captures HTTP/S network traces including response time and request and response payload sizes for supported mobile apps. It also supports custom network traces for requests not automatically captured. Firebase: Network Request Performance

This helps distinguish different problems.

If an API is slow for every platform, the backend may be responsible.

If it is fast from the server environment but slow primarily for mobile users on cellular connections, payload size or request patterns may matter more.

Also look at how many requests a screen makes.

Twenty fast requests can still create a slow mobile workflow because each one has network overhead and may behave very differently on weak connectivity.

8. Instrument critical user journeys, not only infrastructure-level events

Platform metrics tell you whether the app launches, hangs or consumes memory.

They may not tell you that submitting an insurance claim now takes eight seconds.

Add application-specific monitoring around the actions that matter most.

Examples include:

  • time from login submission to usable home screen;
  • time to open a conversation;
  • time to retrieve an account;
  • time to add an item to cart;
  • time to complete checkout;
  • time to upload or process a document.

Firebase Performance Monitoring supports custom traces that measure application-specific code or workflows in addition to its automatically collected lifecycle traces. Its built-in app-start trace, for example, measures from application opening until the app becomes responsive. Firebase: App Lifecycle Performance

This distinction is essential.

A mobile app can have acceptable generic system metrics while one commercially important workflow is performing badly.

[Internal Link: “Application Performance Optimization: A Practical Guide”]

9. Segment performance by device instead of trusting the average

Device diversity is one of the defining characteristics of mobile performance.

The same application may run on:

  • a current flagship phone;
  • a five-year-old mid-range device;
  • a low-memory Android handset;
  • different CPU architectures;
  • several supported OS releases.

Android's guidance specifically recommends testing memory-constrained devices because users on those devices are more likely to encounter startup latency, ANRs and crashes.

Segment production data by:

  • device model;
  • RAM/device tier where available;
  • OS version;
  • app version;
  • network type;
  • geography when operationally useful.

Do not immediately optimize for the absolute slowest obscure device in the fleet.

Look for meaningful clusters.

If 18% of your users share a device tier with significantly worse startup and ANR behaviour, that is a much stronger optimization signal than one unusual outlier.

10. Watch performance by app and OS version

Averages can also hide release-specific regressions.

Suppose overall startup time changes very little because only 20% of users have installed the newest release.

Among those users, startup may have become 35% slower.

Segment metrics by app version so the effect appears before the entire install base updates.

OS versions deserve similar attention.

An operating-system update can alter scheduling, background execution, memory behaviour, permissions or rendering characteristics. A release that performs normally on the previous OS may behave differently after users upgrade.

This makes version segmentation essential to mobile maintenance, particularly after:

  • app releases;
  • framework/runtime changes;
  • SDK updates;
  • major Android or iOS releases.

You want to know not only whether the app is slower, but when that change began and which software combination experiences it.

Monitor app size and disk behaviour where they affect experience

App size is not the first metric to investigate when a button feels slow, but it belongs in a broader mobile-performance view.

Large binaries and data footprints can affect download, installation, storage pressure and, indirectly, memory and runtime behaviour.

Apple's current MetricKit includes measures for total file size, cache folders, app data and disk writes. Android's performance guidance likewise treats app size as one of the common areas affecting mobile app quality.

Watch for unexpected growth across releases.

If the app increases significantly in size, identify whether the change comes from:

  • new libraries;
  • duplicate assets;
  • media;
  • bundled models;
  • cached application data.

The point is not to chase the smallest possible binary. It is to prevent application footprint from growing invisibly.

Build a monitoring baseline instead of one giant dashboard

A useful mobile performance baseline can be surprisingly compact.

Area

What to monitor

Startup

cold/warm startup or platform equivalent; launch percentiles

Responsiveness

hangs, ANRs, hitching/jank, interaction latency

Stability

crash rate, ANR rate, memory terminations

Memory

typical and peak memory, growth/leaks, device-tier differences

CPU

expensive foreground/background operations

Battery

background work, wakeups, network activity

Network

endpoint latency, failures, request/response size

Critical journeys

login, search, checkout or other business-specific timings

Segmentation

app version, OS version, device model/tier, network

Footprint

application size and significant disk growth

Do not treat every row as equally important.

A media app may care deeply about frame smoothness and network throughput. A banking app may prioritize startup, login responsiveness and transaction latency.

Choose the metrics according to what users actually do.

Turn performance data into actionable thresholds

Collecting metrics without defining what requires attention produces dashboards nobody acts on.

For important metrics, establish a normal range and decide when engineering should investigate.

Those thresholds can come from:

  • platform guidance;
  • historical baseline;
  • business expectations;
  • user research;
  • service-level objectives.

Be cautious with universal targets.

The Android startup thresholds mentioned earlier are useful indicators of excessive behaviour, but they should not become your performance ambition.

Likewise, an acceptable duration for generating a complex video cannot be copied from the expectation for opening a messaging conversation.

A useful threshold answers:

At what point does this behaviour become unacceptable for this particular workflow and user?

Compare before and after every meaningful optimization

Mobile performance optimization should form a feedback loop.

Suppose engineering reduces work performed during app launch.

Compare:

  • startup distribution before and after;
  • affected app versions;
  • low-end devices separately;
  • crash and ANR behaviour;
  • CPU and memory changes.

That final step matters because performance improvements can move cost rather than remove it.

Moving startup work to the first user interaction might make the launch metric look better while creating a sluggish first screen.

Optimization succeeds when the user experience improves, not when one graph does.

Monitor the field, diagnose in the lab

Production monitoring and development profiling solve different problems.

Production tells you:

Where is the application unhealthy, and who is affected?

Profiling tells you:

What is the application doing internally when that problem occurs?

Android provides system traces, CPU and heap profiling, memory tools and benchmarks for investigating problems identified in the field. Apple similarly combines MetricKit's field metrics with diagnostics that can identify code paths associated with hangs, crashes, launch problems and other performance conditions.

A useful workflow is therefore:

Observe production → isolate affected segment → reproduce representative conditions → profile → change → release → confirm production improvement.

That is considerably stronger than optimizing whatever happens to look slow on a developer's phone.

[Internal Link: “Application Monitoring: What Should You Monitor in a Production App?”]

Mobile performance needs a real-device view

The biggest mistake in mobile app performance monitoring is assuming that the development team's experience represents the user's experience.

It does not.

Users have different phones, memory limits, operating systems, networks and usage histories. Their devices may be warm, low on storage, switching between cellular and Wi-Fi, or running several other applications while yours is active.

For Levelworks, maintaining Performant App Health therefore requires production visibility alongside laboratory testing. Observable matters because optimization begins with knowing where degradation occurs, while Tested helps prevent improvements on one device or workflow from creating regressions somewhere else.

A useful mobile performance program does not ask only:

“Is the app fast?”

It asks:

“How quickly does it start, how smoothly does it respond, how much device resource does it consume, how fast do its network-dependent workflows complete—and which users are having a materially worse experience than everyone else?”

Once those answers are visible, mobile performance optimization stops being guesswork.

‍

Continue Reading