Bird
Raised Fist0
Android Kotlinmobile~20 mins

rememberSaveable for configuration changes in Android Kotlin - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
rememberSaveable Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ ui_behavior
intermediate
2:00remaining
What happens to the state saved with rememberSaveable on screen rotation?

Consider a Compose UI using rememberSaveable to store a counter value. What will happen to the counter value when the device is rotated (causing a configuration change)?

AThe app crashes because rememberSaveable cannot handle rotation.
BThe counter value resets to its initial value after rotation.
CThe counter value is preserved and restored after rotation.
DThe counter value doubles automatically after rotation.
Attempts:
2 left
💡 Hint

Think about what rememberSaveable is designed to do with state during configuration changes.

📝 Syntax
intermediate
2:00remaining
Which code snippet correctly uses rememberSaveable to save a String state?

Choose the correct Kotlin Compose code that uses rememberSaveable to save a String variable name.

Aval name = remember { mutableStateOf("") }
Bval name = rememberSaveable { mutableStateOf("") }
Cval name = rememberSaveable("")
Dval name = mutableStateOf(rememberSaveable("") )
Attempts:
2 left
💡 Hint

Remember the syntax for using rememberSaveable with mutableStateOf.

❓ lifecycle
advanced
2:00remaining
What is the difference between remember and rememberSaveable regarding process death?

Which statement correctly describes how remember and rememberSaveable behave when the app process is killed by the system?

ANeither <code>remember</code> nor <code>rememberSaveable</code> can restore state after process death.
B<code>remember</code> and <code>rememberSaveable</code> both preserve state after process death automatically.
C<code>rememberSaveable</code> loses state on process death; <code>remember</code> restores it.
D<code>remember</code> loses state on process death; <code>rememberSaveable</code> can restore state if it is Parcelable or can be saved in Bundle.
Attempts:
2 left
💡 Hint

Think about what happens to in-memory state versus saved instance state on process death.

🔧 Debug
advanced
2:00remaining
Why does this rememberSaveable state not restore after rotation?

Given this code snippet, why does the state not restore after device rotation?

var count by rememberSaveable { mutableStateOf(0) }

Button(onClick = { count++ }) {
  Text("Count: $count")
}
ABecause the code uses delegated property <code>by</code> without importing <code>import androidx.compose.runtime.getValue</code> and <code>setValue</code>.
BBecause the variable is declared as <code>var</code> with delegated property, it should be <code>val</code>.
CBecause rememberSaveable requires a key parameter to save the state.
DBecause <code>count</code> is a primitive Int, it cannot be saved by rememberSaveable.
Attempts:
2 left
💡 Hint

Check if the delegated property syntax is fully supported by imports.

🧠 Conceptual
expert
2:00remaining
How does rememberSaveable handle custom data classes for state preservation?

You want to save a custom data class instance using rememberSaveable. Which approach will correctly preserve the state across configuration changes?

AMake the data class implement Parcelable or Serializable and use rememberSaveable normally.
BUse rememberSaveable without changes; all data classes are saved automatically.
CConvert the data class to JSON string manually and save that string with rememberSaveable.
DUse remember instead of rememberSaveable because rememberSaveable does not support custom classes.
Attempts:
2 left
💡 Hint

Think about what types rememberSaveable can save by default.

Practice

(1/5)
1. What is the main purpose of rememberSaveable in Jetpack Compose?
easy
A. To save UI state across configuration changes like screen rotations
B. To permanently store data in a database
C. To create animations in the UI
D. To manage network requests efficiently

Solution

  1. Step 1: Understand configuration changes

    Configuration changes like screen rotation cause the UI to be recreated, losing normal state.
  2. Step 2: Role of rememberSaveable

    rememberSaveable automatically saves and restores simple UI state during these changes.
  3. Final Answer:

    To save UI state across configuration changes like screen rotations -> Option A
  4. Quick Check:

    rememberSaveable = saves state on config changes [OK]
Hint: RememberSaveable = remember + auto save/restore state [OK]
Common Mistakes:
  • Confusing rememberSaveable with permanent storage
  • Thinking it manages animations or network
  • Using remember instead and losing state on rotation
2. Which of the following is the correct syntax to declare a counter state that survives configuration changes using rememberSaveable?
easy
A. var count = mutableStateOf(0)
B. val count = remember { mutableStateOf(0) }
C. var count by rememberSaveable { mutableStateOf(0) }
D. val count by rememberSaveable(0)

Solution

  1. Step 1: Identify correct usage of rememberSaveable

    The correct syntax uses delegation with by and initializes with mutableStateOf inside a lambda.
  2. Step 2: Check each option

    var count by rememberSaveable { mutableStateOf(0) } matches the correct pattern: var count by rememberSaveable { mutableStateOf(0) }.
  3. Final Answer:

    var count by rememberSaveable { mutableStateOf(0) } -> Option C
  4. Quick Check:

    rememberSaveable needs mutableStateOf inside lambda [OK]
Hint: Use var count by rememberSaveable { mutableStateOf(0) } [OK]
Common Mistakes:
  • Using remember instead of rememberSaveable
  • Missing delegation with 'by'
  • Passing initial value directly without lambda
3. Given this code snippet, what will be the displayed count after rotating the device twice?
var count by rememberSaveable { mutableStateOf(0) }
Button(onClick = { count++ }) {
  Text("Count: $count")
}
medium
A. App crashes on rotation due to state loss
B. Count resets to 0 after each rotation
C. Count increments automatically on rotation
D. Count value is preserved across rotations

Solution

  1. Step 1: Understand rememberSaveable behavior

    It saves and restores the state value across configuration changes like rotations.
  2. Step 2: Analyze the code

    Count increments on button clicks and is preserved after rotations, so it does not reset.
  3. Final Answer:

    Count value is preserved across rotations -> Option D
  4. Quick Check:

    rememberSaveable preserves state on rotation [OK]
Hint: rememberSaveable keeps count after rotations [OK]
Common Mistakes:
  • Assuming count resets after rotation
  • Thinking rotation increments count
  • Believing app crashes due to state loss
4. What is wrong with this code if the goal is to preserve the toggle state across configuration changes?
val isChecked = remember { mutableStateOf(false) }
Checkbox(checked = isChecked.value, onCheckedChange = { isChecked.value = it })
medium
A. The onCheckedChange lambda is missing
B. Using remember instead of rememberSaveable loses state on rotation
C. Checkbox requires a String value, not Boolean
D. MutableStateOf should not be used for checkboxes

Solution

  1. Step 1: Identify state preservation method

    Using remember alone does not save state across configuration changes.
  2. Step 2: Correct approach

    Replace remember with rememberSaveable to preserve toggle state on rotation.
  3. Final Answer:

    Using remember instead of rememberSaveable loses state on rotation -> Option B
  4. Quick Check:

    rememberSaveable needed for state preservation [OK]
Hint: Use rememberSaveable, not remember, for config change state [OK]
Common Mistakes:
  • Confusing remember with rememberSaveable
  • Thinking mutableStateOf is wrong for checkbox
  • Missing onCheckedChange lambda
5. You want to save a user input text that should survive configuration changes and process death. Which approach correctly uses rememberSaveable with a custom saver for a complex data type?
hard
A. var userInput by rememberSaveable(stateSaver = TextFieldValue.Saver) { mutableStateOf(TextFieldValue("") ) }
B. var userInput by rememberSaveable { mutableStateOf(TextFieldValue("") ) }
C. var userInput by remember { mutableStateOf(TextFieldValue("") ) }
D. var userInput by rememberSaveable(TextFieldValue("") )

Solution

  1. Step 1: Understand saving complex types

    Complex types like TextFieldValue need a custom saver to be saved/restored by rememberSaveable.
  2. Step 2: Check correct syntax

    var userInput by rememberSaveable(stateSaver = TextFieldValue.Saver) { mutableStateOf(TextFieldValue("") ) } uses stateSaver = TextFieldValue.Saver with rememberSaveable and mutableStateOf, which is correct.
  3. Final Answer:

    var userInput by rememberSaveable(stateSaver = TextFieldValue.Saver) { mutableStateOf(TextFieldValue("") ) } -> Option A
  4. Quick Check:

    Custom saver needed for complex types with rememberSaveable [OK]
Hint: Use stateSaver parameter for complex types in rememberSaveable [OK]
Common Mistakes:
  • Not providing a custom saver for complex types
  • Using remember instead of rememberSaveable
  • Passing initial value directly without lambda
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard