Definition
App Not Responding (ANR) Rate is the percentage of app sessions during which the app becomes unresponsive (main thread frozen) for more than 5 seconds on Android. ANR events occur when the app cannot process user input or refresh the UI within the timeout window, typically due to main-thread blocking from network calls, heavy computation, or database operations. As of 2026, Google Play's ranking algorithm penalizes apps with high ANR rates severely—apps in the bottom 25% of their category for ANR performance face significant ranking penalties, regardless of other optimization efforts or relevance scores.
How It Works
Google Play Store
- ANR Detection — Android OS detects when main thread is frozen for >5 seconds and user attempts to interact
- Reporting — Google Play Console tracks ANR rate via Google Play Services / Firebase Crashlytics
- Ranking Impact — 2026 algorithm penalizes high ANR rates as a quality/performance signal
- Competitive Advantage — Apps in top 50% ANR performance may receive ranking boost
ANR Trigger Scenarios:
- Network request on main thread (blocking I/O)
- Heavy image processing, video rendering on main thread
- Expensive database queries
- Large data parsing (JSON, XML)
- Synchronous file operations
- Complex animations or rendering
Apple App Store
ANR equivalents on iOS are tracked as "Hang Rate" (app frozen >250ms). Impact on App Store ranking is minimal; quality score considers hangs but not as severely as Google Play.
Formulas & Metrics
ANR Rate Calculation:
ANR_Rate = (Sessions_with_ANR / Total_Sessions) × 100
Benchmark Thresholds (by category, 2026):
- Top 25% (Excellent): <0.5% ANR rate
- 25–50% (Good): 0.5–1.0% ANR rate
- 50–75% (Fair): 1.0–2.5% ANR rate
- Bottom 25% (Poor): >2.5% ANR rate
ANR Distribution by Category:
- Games: 0.3–1.5% average ANR rate
- Social: 0.5–2.0%
- Utilities: 0.2–0.8%
- Finance: 0.1–0.5% (users intolerant of hangs)
Ranking Penalty Calculation (estimated):
If app ANR > Category_75th_Percentile, apply visibility penalty = -20% to -50% depending on severity
Best Practices
- Move Network Calls Off Main Thread — Use Kotlin Coroutines, RxJava, or Retrofit with background executors. Never call HTTP requests, database queries, or file I/O on main thread.
- Optimize Image Handling — Load images asynchronously. Use Glide, Picasso, or Coil for efficient image loading with caching. Downsize images before display.
- Profile for Jank and ANR — Use Android Profiler in Android Studio to identify main-thread blocking. Set ANR detection threshold in Firebase Crashlytics < 1%.
- Use WorkManager for Background Tasks — Defer heavy computation (data sync, batch processing) to WorkManager or background services. Never block main thread for user operations.
- Batch and Throttle Operations — If heavy operations necessary, batch them and throttle frame updates. Use RecyclerView efficiently with ViewHolder patterns.
- Monitor Firebase Crashlytics — Track ANR rate in Crashlytics dashboard. Set up alerts for ANR spikes > 1%. Investigate top ANR stacktraces weekly.
- Test on Low-end Devices — Test on Android devices with 2GB RAM and older processors. ANR issues often surface only on lower-spec devices.
- Set Animation Frame Rates — Cap animations to 30 FPS on low-end devices; modern devices can handle 60 FPS. Check device capabilities before rendering.
Examples
Example 1: Network Call on Main Thread (BAD)
// DON'T DO THIS — blocks main thread
HttpURLConnection conn = (HttpURLConnection) new URL("https://api.example.com/data").openConnection();
InputStream in = conn.getInputStream(); // Freezes UI!
Example 2: Async Network Call (GOOD)
// DO THIS — uses coroutine
viewModelScope.launch {
try {
val data = withContext(Dispatchers.IO) {
apiService.fetchData()
}
updateUI(data) // Main thread update
} catch (e: Exception) { }
}
Example 3: ANR Ranking Impact
- Budget App A: Optimized for ANR <0.5%, strong search ranking for "budget app"
- Budget App B: Poor ANR rate 3.5%, otherwise identical features/rating
- App A outranks App B by >50% visibility in 2026, even with lower star rating
Dependencies
Influences
- Ranking Factors — ANR is now critical ranking signal (2026+)
- Quality Score — ANR contributes to overall quality assessment
- Download Velocity — Better performance drives more qualified installs
- Conversion Rate — Low-ANR apps convert users to retained installs more effectively
Depends On
- Android Vitals — ANR tracking via Google Play's vitals monitoring
- App Store Optimization (ASO) — Performance is now core ASO factor
- Retention Rate — High ANR directly causes uninstalls and churn
Platform Comparison
| Metric | Google Play Store | Apple App Store |
|---|---|---|
| **ANR/Hang Tracking** | ANR tracked in Google Play Console; <5 second main-thread freeze | Hang rate tracked; >250ms main thread freeze |
| **Ranking Impact** | Severe penalty; apps in bottom 25% lose significant visibility | Minimal impact; slight quality score adjustment |
| **Benchmark Thresholds** | <0.5% excellent, >2.5% penalized | <2% excellent, <5% acceptable |
| **Monitoring Tools** | Firebase Crashlytics, Google Play Console | Xcode Metrics, Crashlytics |
Related Terms
Android Vitals, Quality Score, Ranking Factors, Performance Metrics, App Store Optimization (ASO), Battery Consumption, Retention Rate, Crash Rate
Sources & Further Reading
- Google Play Console Vitals Dashboard Documentation
- Firebase Crashlytics ANR Reporting
- Android Performance Best Practices 2026
- Google Play Algorithm Impact of ANR on Ranking 2026