# 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)