Google has confirmed that from February 2027, every app and game on Play must meet new “bad behavior” thresholds covering foreground and background memory usage, bitmap memory, and DEX code optimisation. Miss them, and Google Play can reduce your app’s visibility and restrict publishing — a search and store-listing penalty, not just a technical warning.
The thresholds are evaluated on the 90th percentile (P90) of data collected over the trailing 28 days, which is the part most teams get wrong. A P90 metric means 90% of your measured sessions sit at or below that number — so a handful of memory-hungry screens or a leak that only shows up on mid-tier devices can blow your P90 even while your average looks perfectly healthy. Waiting for the enforcement date to check your standing means finding out too late, since fixing a memory leak that’s baked into a widely-used screen can take a full release cycle.
Data Points to Track
memory_footprint_mb— Anonymous RSS + Swap, tagged by app state:foreground,user_perceived_service,backgrounddevice_ram_tier— the device’s total RAM bucket (Google’s thresholds scale with it; devices over 16GB are largely exempt)bitmap_memory_mb— peak bitmap allocation, tagged by the same app-state bucketsdex_size_mbanddex_optimization_flags— obfuscation, shrinking and optimisation status for App Bundles with DEX over 50MBscreen_nameoractivity_id— so a P90 breach can be traced back to the specific screen or flow causing itsession_duration_bucket— long-running sessions are disproportionately likely to accumulate memory pressure
Setup Steps
- Instrument app-state transitions. Fire a lightweight memory snapshot event whenever the app moves between foreground, background and user-perceived-service states, not just on crash or ANR.
- Tag every event with device RAM tier. Pull this once at session start from the OS and attach it as a session property so you can segment P90 by tier, matching how Google evaluates it.
- Add a bitmap allocation hook. Wrap your image-loading library’s decode calls to log peak bitmap memory per screen, since a small number of screens usually account for most of the risk.
- Run a DEX audit in CI. Add a build step that reports DEX size and confirms obfuscation/shrinking/optimisation rates before a release ships, so a regression is caught before it reaches users.
- Build a rolling 28-day P90 dashboard. Calculate P90 (not average or median) per app-state bucket, refreshed daily, so you’re looking at the same number Google will use to judge you.
Actionable Insights
A rising P90 with a flat average is the clearest early warning sign — it means a subset of sessions, devices or screens are getting worse even though most users see no change. Segmenting by screen_name turns that abstract number into an engineering ticket: it tells you exactly which flow to profile first. Segmenting by device_ram_tier tells you whether the problem is a genuine leak or simply Google’s thresholds being stricter on lower-RAM devices your app was never tuned for. Tracking DEX optimisation flags in CI, rather than checking manually before submission, catches a regression from a new dependency before it ships rather than after Google flags it.
Teams that start tracking these signals now have four months before enforcement to find and fix the handful of screens driving their P90, rather than discovering the problem when Play Console restricts their listing.
Related Resources
Need help tracking this in your app?
Our team sets up analytics pipelines for mobile and web teams every day. Talk to us and get your first events flowing in under an hour.
Talk to an expert