September 21, 2026

Android 17's per-app memory limits: how to tell a memory kill from a crash

Android 17 can swap, then kill, memory-heavy apps. Here's how to detect it with ApplicationExitInfo, what to monitor, and what Google hasn't confirmed yet.

Insight

Android 17 ships a new per-app memory limit that can swap an app's memory into compressed RAM, then kill the process outright, and the crash report that lands in your dashboard won't say why. Google announced the change in an Android Developers Blog post in August 2026, and it's rolling out on Pixel devices first before spreading to other manufacturers over the coming year. If your Android app has been logging unexplained terminations lately, this is the first thing worth ruling out.

What Android 17's per-app memory limit actually does

Google built the feature to protect the overall user experience from apps that use excess memory and slow the whole system down. It's live on Pixel devices first, and Google says other manufacturers will adopt it over the coming year, across devices with anywhere from 4GB to 16GB and up of RAM. The post doesn't name a single non-Pixel OEM, a version number, or a date. Anything more specific than "the coming year" is a guess, not something Google has published.

If your app ships on Pixel today, assume the limit already applies to it. If it doesn't, you don't know when that changes, only that Google has said it will, at some point in the next year.

How enforcement escalates

Cross the threshold and Android doesn't kill your process right away. It moves to zRAM swapping first: the app's memory pages get compressed and pushed into a compressed RAM pool, which produces "noticeable UI jank and experience slowdowns" instead of a crash. Apps built on Jetpack Compose's declarative rendering often show that jank first, dropped frames and stutter during scroll or animation, because recomposition is competing for the same pages the system just swapped out.

Keep exceeding the limit after that and Android terminates the process. That's the moment a report that looks like a routine out-of-memory crash is actually the memory limiter doing exactly what it's supposed to do.

How to detect a memory-limit kill in production

Teams running Kotlin Multiplatform need to wire this up specifically on the Android target, since it's an OS-level behavior with no iOS equivalent. If you're weighing how KMP teams share platform-level code, this is one of the places sharing has to stop.

1. Check ApplicationExitInfo.getDescription()

Query ApplicationExitInfo for exit reason REASON_OTHER and read the description string it returns. When Android's memory limiter caused the exit, the description contains the literal string MemoryLimiter:AnonSwap. Grep your crash pipeline for that exact string and you can separate memory-limit kills from every other REASON_OTHER exit your app already logs.

2. Capture heap dumps with ProfilingManager

On Android 15 (API level 35) and above, the same post says ProfilingManager can auto-capture a heap dump the moment the limit is reached if you register a trigger of type TRIGGER_TYPE_ANOMALY. That gives you the actual heap contents at the point of the swap, not just an exit reason logged after the fact.

3. Watch Android vitals in Play Console

Play Console's Android vitals already track Memory Usage, split into Anonymous RSS and swap, plus Bitmap Memory Usage. Watch the swap figure specifically. A rising swap number on devices that never showed one before tends to show up days before the exit-reason spike does.

4. Upgrade Crashlytics for OOM tracking

If you're on Firebase Crashlytics, move to version 20.1.0, which Google says adds debug data for out-of-memory exceptions and memory limiter kills. Older versions won't tag these kills the same way, so you'll see the crash volume without the context that explains it.

What's still unknown

Google's post doesn't publish a memory threshold for any RAM tier. There's no MB or GB figure to test against on a 4GB device or a 16GB one, so you can't budget your app's memory usage against a known ceiling yet. Until that number shows up somewhere, the honest answer to "how much memory can my app use" is: less than before, by an amount nobody outside Google has stated.

The same gap applies to timing on non-Pixel hardware. There's no manufacturer named, no version tied to a specific OEM, and no date beyond "an increasing number of manufacturers" over the coming year. Build the detection now and you won't need either number to notice when it starts happening to your users.

FAQ

Does this affect all Android devices right now?

No. The limit is live on Pixel devices only at launch, and Google says other manufacturers will pick it up over the coming year across devices from 4GB to 16GB+ of RAM. If your users skew away from Pixel, you likely have time before this reaches most of your install base, but the source doesn't say how much.

What's the difference between a memory-limit kill and a normal OOM crash?

A memory-limit kill reports exit reason REASON_OTHER with MemoryLimiter:AnonSwap inside the description string. A standard system-level OOM kill won't carry that string. If you're already parsing ApplicationExitInfo output, that string is the entire difference between the two.

Do I need to change my app's memory usage before this rolls out?

Not urgently. There's no compliance deadline in Google's post and no published threshold to build against yet. What's worth doing now is wiring up detection, so instead of chasing a mystery crash spike after the rollout reaches your users, you already know what MemoryLimiter:AnonSwap looks like in your own data.

Share this article

Author Image

HighCircl Editorial Team

The HighCircl editorial team writes about hiring software engineers, nearshore development, and engineering team building. Our articles draw on direct experience sourcing and placing senior developers across Poland, Hungary, Slovakia, Serbia, Slovenia, Romania, and Spain — and on candid conversations with the CTOs and engineering leads who hire them.

HighCircl is a nearshore engineering network that delivers matched candidate shortlists in 72 hours. Every piece of content we publish is informed by real engagement data: actual developer rates, real hiring timelines, and what separates engineering teams that scale cleanly from those that stall.

Take Me to the Experts

Access our network of industry-leading software engineers.

Start Now