Android State Management
Priority: P0
Implementation Guidelines
ViewModel Pattern
- Exposure: Expose ONE
StateFlow<UiState>via.asStateFlow(). - Scope: Use
viewModelScopefor all coroutines. - Initialization: Trigger initial load in
initorLaunchedEffect(once).
UI State (LCE)
- Type: sealed interface
UiState(Loading, Content, Error). - Immutability: Data classes inside should be
@Immutable.
Flow Lifecycle
- Collection: Use
collectAsStateWithLifecycle()in Compose. - Hot Flows: Use
SharingStarted.WhileSubscribed(5000)for shared resources.
Anti-Patterns
- No LiveData for New Code: Use StateFlow — lifecycle-safe and Compose-compatible.
- No Public MutableStateFlow: Expose only
.asStateFlow()to consumers. - No Context in ViewModel: Leaks Activity. Use Application context if truly needed.
References
- Templates