Introduction
ANR (App Not Responding) issues are one of the most common and frustrating problems Android developers face, especially after major Android updates like Android 14. An ANR happens when an app becomes unresponsive for a certain amount of time, and the system shows a popup asking the user to close the app or wait.
In simple words, an ANR means the app is doing too much work on the main thread and is unable to respond to user actions quickly. Android 14 introduces stricter performance monitoring, better system diagnostics, and tighter background execution rules, which makes ANRs more visible if apps are not well optimized.
This article explains how developers debug ANR issues on Android 14 devices, step by step, using simple language and real-world examples.
What Causes ANR Issues on Android 14
Before debugging, it is important to understand why ANRs happen.
Common causes include:
Long-running operations on the main (UI) thread
Network calls executed on the main thread
Heavy database queries are blocking the UI
Deadlocks or thread contention
Broadcast receivers are taking too long to finish
Services are doing excessive work without proper threading
On Android 14, the system is more strict about detecting these issues, so apps that were previously "just working" may now trigger ANRs.
Understanding ANR Time Limits
Android triggers an ANR when certain time limits are exceeded.
Typical limits include:
UI thread blocked for about 5 seconds
BroadcastReceiver not finished within about 10 seconds
Service not responding within a defined timeout
Android 14 enforces these limits more consistently, especially on low-memory or heavily loaded devices.
Checking ANR Reports in Google Play Console
One of the first places developers look is the Google Play Console.
The Play Console provides:
ANR frequency
Affected Android versions
Device models
Stack traces showing where the app was stuck
Example insight:
You may see that most ANRs happen on Android 14 devices during app startup, which hints at heavy initialization code on the main thread.
This data helps developers prioritize which ANRs to fix first.
Reading ANR Stack Traces
ANR reports include stack traces that show what the main thread was doing when the ANR occurred.
A typical ANR trace shows:
The main thread stack
Other running threads
Locks or blocked resources
Example of a simplified ANR stack trace:
"main" prio=5 tid=1 Blocked
at java.lang.Object.wait(Native Method)
at com.example.app.DatabaseHelper.loadData(DatabaseHelper.java:85)
at com.example.app.MainActivity.onCreate(MainActivity.java:42)
This tells the developer that database loading is blocking the UI during app startup.
Using Logcat to Investigate ANRs
Logcat is a powerful tool for debugging ANRs during development and testing.
Developers typically filter logs using:
adb logcat | grep ANR
Or check system logs:
adb logcat ActivityManager:E *:S

Join the conversation! Your thoughts help the community grow.