Files
Kordant/tasks/android-production/12-startup-anr.md
2026-05-26 16:06:34 -04:00

2.5 KiB

12. App Startup Time & ANR Prevention

meta: id: android-production-12 feature: android-production priority: P2 depends_on: [] tags: [performance, startup, production]

objective:

  • Optimize app startup time and prevent ANRs to ensure smooth user experience

deliverables:

  • Startup time measurement and baseline
  • Lazy initialization of heavy components
  • ANR prevention measures
  • App Startup library integration

steps:

  1. Measure current startup time:
    • Use Android Studio Profiler
    • Use Macrobenchmark library
    • Measure cold start (first launch)
    • Measure warm start (subsequent launches)
    • Establish baseline metrics
  2. Optimize Application.onCreate:
    • Minimize work in KordantApp.onCreate
    • Use App Startup library for initialization ordering
    • Defer non-critical initialization
    • Initialize on background threads where possible
  3. Lazy load heavy components:
    • Defer TRPCApiService initialization until needed
    • Lazy load repository dependencies
    • Defer analytics initialization
    • Use Dagger/Hilt lazy injection
  4. Optimize theme and layout:
    • Use simple splash theme (windowBackground only)
    • Avoid complex layouts in first screen
    • Preload critical resources
  5. Prevent ANRs:
    • Move all IO operations to background threads
    • Use coroutines with Dispatchers.IO
    • Avoid blocking main thread in composables
    • Profile with StrictMode in debug builds
  6. Add tests:
    • Macrobenchmark tests for startup time
    • ANR detection in CI
    • Memory usage during startup

tests:

  • Performance: Startup time <1.5s on Pixel 6
  • ANR: No ANRs during critical flows
  • Memory: No memory spikes during startup

acceptance_criteria:

  • Cold startup time <1.5 seconds on Pixel 6
  • Warm startup time <1 second on Pixel 6
  • Splash screen visible for <500ms
  • No blocking operations on main thread during startup
  • Heavy components loaded lazily
  • ANR-free during all critical user flows
  • Macrobenchmark tests for startup time
  • Startup time tracked in CI
  • No StrictMode violations in debug builds

validation:

  • Android Profiler → cold start <1.5s
  • Macrobenchmark → startup metrics within budget
  • StrictMode → no disk/network on main thread
  • Physical device test → feels instant
  • ANR traces → none from Kordant

notes:

  • Android Vitals tracks startup time and ANRs automatically
  • ANR threshold is 5 seconds for input, 10 seconds for BroadcastReceiver
  • App Startup library helps manage initialization order
  • Test on low-end devices (Android 10, 2GB RAM)