What is the difference between `remember` and `rememberSaveable` in Jetpack Compose?
#jetpack-compose#state#remember
Answer
Overview
text
remembertext
rememberSaveableComparison
| Feature | text | text |
|---|---|---|
| Survives recomposition | ✅ Yes | ✅ Yes |
| Survives config changes | ❌ No | ✅ Yes |
| Survives process death | ❌ No | ✅ Yes |
| Performance | Faster | Slightly slower |
| Use Case | UI state | Persistent state |
remember
kotlin@Composable fun Counter() { var count by remember { mutableStateOf(0) } Button(onClick = { count++ }) { Text("Count: $count") } } // ❌ Lost on screen rotation
rememberSaveable
kotlin@Composable fun Counter() { var count by rememberSaveable { mutableStateOf(0) } Button(onClick = { count++ }) { Text("Count: $count") } } // ✅ Survives screen rotation
What Are Configuration Changes?
- Screen rotation
- Language change
- Dark mode toggle
- Font size change
- Multi-window mode
Example: TextField
Without rememberSaveable
kotlin@Composable fun LoginForm() { var email by remember { mutableStateOf("") } TextField( value = email, onValueChange = { email = it } ) } // ❌ Text lost on rotation
With rememberSaveable
kotlin@Composable fun LoginForm() { var email by rememberSaveable { mutableStateOf("") } TextField( value = email, onValueChange = { email = it } ) } // ✅ Text preserved on rotation
Custom Objects
kotlindata class User( val name: String, val age: Int ) : Parcelable @Composable fun UserForm() { var user by rememberSaveable { mutableStateOf(User("Alice", 25)) } }
When to Use Which?
Use textremember
text
remember- Temporary UI state
- Derived values
- Scroll positions (handled by framework)
- Animation states
Use textrememberSaveable
text
rememberSaveable- User input (TextField values)
- Selection state
- Expanded/collapsed states
- Form data
Performance Note
kotlin// Good val expensiveComputation = remember { computeExpensive() } // Overkill val expensiveComputation = rememberSaveable { computeExpensive() }
Rule of Thumb: Use
for user-facing state. UsetextrememberSaveablefor everything else.textremember