Quick answer: ANRs on Android happen when the main (UI) thread is blocked for too long, so the app can't respond to input. The causes are long operations on the main thread, slow I/O, deadlocks, and heavy work that should be backgrounded.

An ANR (Application Not Responding) is Android's way of flagging that your game has become unresponsive, and they can hurt your standing on the platform. They have a specific, fixable cause. Here's what causes ANRs on Android and how to address them.

Why Android Flags an ANR

Android monitors whether your app's main thread (the UI thread) responds to input within a time limit. When the main thread is blocked too long, Android declares an ANR, the app isn't responding. So every ANR comes down to the main thread being blocked, from a few common causes.

In each case, the main thread can't process input in time, so Android flags the app as not responding, an ANR.

Why ANRs Matter and Go Unreported

ANRs ruin the player experience, the game freezes, and players often force-quit or uninstall, frequently without reporting why. Like crashes, ANRs that happen on players' devices are invisible to you unless captured, and they can affect your app's standing on the platform.

Bugnet captures crashes and helps surface unresponsiveness from real sessions, so ANR-causing problems don't stay hidden. Since players rarely report an ANR (they just quit), capturing the conditions is how you find what's blocking the main thread.

Fixing ANRs

The fix for ANRs is consistent: keep the main thread free to respond by moving long or blocking work off it, run heavy computation, I/O, and asset loading in the background so the main thread stays responsive. Fixing deadlocks and reducing per-frame work also helps.

Bugnet captures the context around unresponsiveness, helping you locate the blocking operation. So ANRs on Android are caused by the main thread being blocked too long, and the fix is offloading the blocking work so the main thread can always respond to input within Android's limit.

ANRs on Android happen when the main (UI) thread is blocked too long, by long operations, slow I/O, deadlocks, or synchronous loads. The fix is offloading blocking work so the main thread always responds.