get to prod tasks
This commit is contained in:
77
tasks/android-production/12-startup-anr.md
Normal file
77
tasks/android-production/12-startup-anr.md
Normal file
@@ -0,0 +1,77 @@
|
||||
# 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)
|
||||
Reference in New Issue
Block a user