get to prod tasks
This commit is contained in:
77
tasks/android-production/10-pagination-lists.md
Normal file
77
tasks/android-production/10-pagination-lists.md
Normal file
@@ -0,0 +1,77 @@
|
||||
# 10. Pagination & List Performance
|
||||
|
||||
meta:
|
||||
id: android-production-10
|
||||
feature: android-production
|
||||
priority: P2
|
||||
depends_on: []
|
||||
tags: [performance, lists, production]
|
||||
|
||||
objective:
|
||||
- Implement pagination and optimize list performance to prevent ANRs and jank on large datasets
|
||||
|
||||
deliverables:
|
||||
- Pagination for all list endpoints
|
||||
- LazyColumn optimization
|
||||
- DiffUtil or Compose lazy list optimization
|
||||
- ANR prevention
|
||||
|
||||
steps:
|
||||
1. Implement pagination:
|
||||
- Add pagination to tRPC list endpoints (if not already)
|
||||
- Use Paging 3 library for Jetpack Compose
|
||||
- Configure page size (20-50 items)
|
||||
- Add pagination parameters to API calls
|
||||
2. Optimize LazyColumn:
|
||||
- Use key parameter for item stability
|
||||
- Use contentType for different item types
|
||||
- Avoid unnecessary recompositions
|
||||
- Use remember for expensive calculations
|
||||
3. Add loading states:
|
||||
- Skeleton placeholders while loading first page
|
||||
- Load more indicator at bottom
|
||||
- Empty state for no data
|
||||
- Error state with retry
|
||||
4. Optimize data flow:
|
||||
- Use Flow/PagingData in ViewModels
|
||||
- CollectAsStateWithLifecycle for Compose
|
||||
- Avoid collecting flows in composables directly
|
||||
5. Prevent ANRs:
|
||||
- Move heavy calculations to background threads
|
||||
- Use viewModelScope for coroutines
|
||||
- Avoid blocking main thread
|
||||
- Profile with Android Profiler
|
||||
6. Add tests:
|
||||
- Test pagination boundaries
|
||||
- Test scroll performance
|
||||
- Test memory usage with large lists
|
||||
|
||||
tests:
|
||||
- Unit: Test pagination logic
|
||||
- Performance: Scroll test with 1000+ items
|
||||
- ANR: Profile main thread during list operations
|
||||
|
||||
acceptance_criteria:
|
||||
- All lists paginated (20-50 items per page)
|
||||
- Paging 3 library used for Compose integration
|
||||
- LazyColumn with key and contentType optimization
|
||||
- Skeleton placeholders on initial load
|
||||
- Load more indicator on scroll
|
||||
- Empty and error states handled
|
||||
- No ANRs during list operations
|
||||
- 60fps scrolling on lists >100 items
|
||||
- Memory stable during list scrolling
|
||||
- Unit tests for pagination logic
|
||||
|
||||
validation:
|
||||
- Scroll through alert list → smooth 60fps
|
||||
- Scroll to bottom → next page loads automatically
|
||||
- Check Android Profiler → no main thread blocking
|
||||
- Memory monitor → stable during scrolling
|
||||
- Test with 1000 items → no ANR, no OOM
|
||||
|
||||
notes:
|
||||
- Paging 3 is the modern standard for Android pagination
|
||||
- ANRs on lists are often caused by blocking main thread
|
||||
- Use LazyColumn, not Column, for long lists
|
||||
- Test on low-end devices (Android 10, 2GB RAM)
|
||||
Reference in New Issue
Block a user