Bird
Raised Fist0
Android Kotlinmobile~20 mins

SavedStateHandle in Android Kotlin - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
SavedStateHandle Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ ui_behavior
intermediate
2:00remaining
SavedStateHandle preserves UI state on configuration change
Consider a ViewModel using SavedStateHandle to store a counter value. What will be the value of counter after a device rotation if the user incremented it to 5 before rotation?
Android Kotlin
class CounterViewModel(private val state: SavedStateHandle) : ViewModel() {
  var counter: Int
    get() = state.get<Int>("counter") ?: 0
    set(value) = state.set("counter", value)
}

// User increments counter to 5, then rotates device.
Acounter will increment automatically to 6 after rotation
Bcounter will remain 5 after rotation
Ccounter will be null after rotation causing crash
Dcounter will reset to 0 after rotation
Attempts:
2 left
💡 Hint
SavedStateHandle keeps data across configuration changes like rotation.
❓ lifecycle
intermediate
1:30remaining
When is SavedStateHandle data cleared?
At what point is the data stored in SavedStateHandle cleared automatically by the Android system?
AWhen the ViewModel is cleared after the associated UI is destroyed permanently
BWhen the app process is killed by the system
CWhen the device is rotated
DWhen the user presses the back button once
Attempts:
2 left
💡 Hint
Think about the lifecycle of ViewModel and when it is destroyed.
📝 Syntax
advanced
1:30remaining
Correct way to retrieve a nullable value from SavedStateHandle
Which option correctly retrieves a nullable String value named "username" from SavedStateHandle in Kotlin?
Android Kotlin
val username: String? = savedStateHandle.???
AgetOrDefault("username", "")
BgetValue("username")
Cget<String>("username")
DgetNullable("username")
Attempts:
2 left
💡 Hint
Check the official SavedStateHandle API for retrieving values.
🔧 Debug
advanced
2:00remaining
Why does this SavedStateHandle update not persist after process death?
Given this code snippet, why does the updated value not persist after the app process is killed and restarted?
savedStateHandle["score"] = 10
// app is killed and restarted
val score = savedStateHandle.get("score") ?: 0
AThe value 10 is not serializable and cannot be saved
BThe ViewModel was not recreated properly after restart
CThe key "score" is invalid and cannot be saved
DSavedStateHandle only saves data during configuration changes, not process death
Attempts:
2 left
💡 Hint
Think about what SavedStateHandle is designed to save and what it is not.
🧠 Conceptual
expert
2:30remaining
How does SavedStateHandle integrate with Jetpack Navigation component?
Which statement best describes how SavedStateHandle works with Jetpack Navigation to pass and save UI state between destinations?
ASavedStateHandle automatically saves and restores navigation arguments and state when navigating between destinations
BSavedStateHandle requires manual serialization of navigation arguments to bundles before navigation
CSavedStateHandle cannot be used with Jetpack Navigation and is only for ViewModel internal state
DSavedStateHandle only works with fragments, not with navigation components
Attempts:
2 left
💡 Hint
Consider how navigation arguments and SavedStateHandle share data.

Practice

(1/5)
1.

What is the main purpose of SavedStateHandle in Android Kotlin?

easy
A. To save and restore small UI-related data automatically during configuration changes
B. To manage database connections
C. To handle network requests
D. To create UI layouts dynamically

Solution

  1. Step 1: Understand the role of SavedStateHandle

    SavedStateHandle is designed to save small pieces of data like UI state during configuration changes such as screen rotations.
  2. Step 2: Compare with other options

    Options A, B, and D relate to network requests, database connections, and UI layout creation, which are not the purpose of SavedStateHandle.
  3. Final Answer:

    To save and restore small UI-related data automatically during configuration changes -> Option A
  4. Quick Check:

    SavedStateHandle saves UI state = C [OK]
Hint: Remember: SavedStateHandle saves UI data on config changes [OK]
Common Mistakes:
  • Confusing SavedStateHandle with database or network management
  • Thinking it manages large data or files
  • Assuming it creates UI layouts
2.

Which of the following is the correct way to store a value "username" in SavedStateHandle named savedStateHandle?

?
easy
A. savedStateHandle.put("username", "John")
B. savedStateHandle.set("username", "John")
C. savedStateHandle.save("username", "John")
D. savedStateHandle.store("username", "John")

Solution

  1. Step 1: Recall SavedStateHandle API methods

    The correct method to store data is set(key, value).
  2. Step 2: Check method names in options

    Only savedStateHandle.set("username", "John") uses set, others use incorrect method names.
  3. Final Answer:

    savedStateHandle.set("username", "John") -> Option B
  4. Quick Check:

    Use set() to store data = A [OK]
Hint: Use set() to save data in SavedStateHandle [OK]
Common Mistakes:
  • Using put(), save(), or store() which do not exist
  • Confusing with SharedPreferences methods
  • Forgetting to use quotes around keys
3.

Given the code below, what will be the output of println(savedStateHandle.get<String>("name"))?

val savedStateHandle = SavedStateHandle()
savedStateHandle.set("name", "Alice")
savedStateHandle.set("age", 30)
savedStateHandle.set("name", "Bob")
medium
A. null
B. Alice
C. Bob
D. 30

Solution

  1. Step 1: Analyze the set operations

    The key "name" is first set to "Alice", then overwritten with "Bob".
  2. Step 2: Determine the value returned by get

    Getting "name" returns the latest value, which is "Bob".
  3. Final Answer:

    Bob -> Option C
  4. Quick Check:

    Last set value returned = A [OK]
Hint: Last set value for a key is returned by get() [OK]
Common Mistakes:
  • Assuming first set value is returned
  • Confusing key names
  • Expecting numeric value for string key
4.

Identify the error in the following code snippet using SavedStateHandle:

val savedStateHandle = SavedStateHandle()
savedStateHandle.set("count", 10)
val count: String = savedStateHandle.get("count") ?: "0"
println(count)
medium
A. println() cannot print variables
B. Missing key in get() method
C. SavedStateHandle cannot store Int values
D. Type mismatch: trying to assign Int to String without conversion

Solution

  1. Step 1: Check variable types

    The value stored is Int (10), but retrieved as String without conversion.
  2. Step 2: Understand Kotlin type safety

    Assigning Int to String variable causes a type mismatch error.
  3. Final Answer:

    Type mismatch: trying to assign Int to String without conversion -> Option D
  4. Quick Check:

    Type mismatch error = D [OK]
Hint: Match types when getting values from SavedStateHandle [OK]
Common Mistakes:
  • Ignoring type mismatch errors
  • Assuming automatic type conversion
  • Thinking SavedStateHandle only stores strings
5.

You want to save a user's score in SavedStateHandle and restore it after a configuration change. Which approach correctly ensures the score is saved and retrieved safely?

class ScoreViewModel(private val savedStateHandle: SavedStateHandle) : ViewModel() {
    fun saveScore(score: Int) {
        // What to do here?
    }
    fun getScore(): Int {
        // What to do here?
    }
}
hard
A. saveScore: savedStateHandle.set("score", score) getScore: savedStateHandle.get<Int>("score") ?: 0
B. saveScore: savedStateHandle.put("score", score) getScore: savedStateHandle.get("score") as Int
C. saveScore: savedStateHandle.save("score", score) getScore: savedStateHandle.get("score") ?: 0
D. saveScore: savedStateHandle.set("score", score.toString()) getScore: savedStateHandle.get<String>("score")?.toInt() ?: 0

Solution

  1. Step 1: Use correct methods to save and get data

    Use set to save and get<Int> to retrieve with a default fallback.
  2. Step 2: Validate type safety and default value

    saveScore: savedStateHandle.set("score", score) getScore: savedStateHandle.get<Int>("score") ?: 0 uses correct method names and safely returns 0 if no score is saved.
  3. Final Answer:

    saveScore: savedStateHandle.set("score", score) getScore: savedStateHandle.get<Int>("score") ?: 0 -> Option A
  4. Quick Check:

    Use set() and get<Int>() with default = B [OK]
Hint: Always use set() and get<Type>() with default fallback [OK]
Common Mistakes:
  • Using non-existent methods like put() or save()
  • Storing Int as String unnecessarily
  • Not providing default value on get()
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