Files
Kordant/tasks/android-production/10-pagination-lists.md
2026-05-26 16:06:34 -04:00

2.4 KiB

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)