Bird
Raised Fist0
Android Kotlinmobile~8 mins

Saving instance state in Android Kotlin - Build, Publish & Deploy

Choose your learning style10 modes available
Build & Publish - Saving instance state
Performance Impact of Saving Instance State

Saving instance state helps your app keep user data during screen rotations or temporary interruptions. It uses small memory to store simple data like strings or numbers. This process is fast and does not affect frame rate if done correctly. However, saving large objects or complex data can slow down UI responsiveness and increase memory use, which may cause jank or dropped frames.

Battery impact is minimal because saving state happens only during lifecycle events, not continuously.

💻How to Optimize Saving Instance State for 60fps Rendering
  • Save only essential, small data types (e.g., primitives, strings).
  • Avoid saving large objects or complex data structures in the instance state bundle.
  • Use ViewModel or persistent storage (database, files) for large or complex data instead of instance state.
  • Perform saving operations quickly in onSaveInstanceState() to avoid blocking the main thread.
  • Test your app on rotation and backgrounding to ensure smooth UI transitions without frame drops.
Impact on App Bundle Size and Startup Time

Using instance state saving does not increase your app bundle size because it is part of Android's lifecycle management. It only stores temporary data in memory or saved instance state bundles.

Startup time is not affected by saving instance state, but restoring large amounts of data can delay UI rendering after rotation or process death.

Keep saved data minimal to maintain fast startup and smooth user experience.

iOS vs Android Differences for Saving Instance State

Android uses onSaveInstanceState() and Bundle to save small UI state data during lifecycle changes like rotation.

iOS uses different patterns: UIViewController state restoration APIs or saving state in UserDefaults or other persistence methods.

Android requires explicit saving and restoring in lifecycle methods, while iOS often relies on state restoration protocols or manual persistence.

Understanding platform lifecycle differences helps write better cross-platform apps.

Relevant Store Review Guidelines and Requirements
  • Google Play: No specific restrictions on saving instance state, but apps must not crash or lose user data unexpectedly during lifecycle changes.
  • Apple App Store: Apps must handle state restoration gracefully to avoid poor user experience, but no direct rules on saving instance state.
  • Both stores require apps to be stable and responsive during lifecycle events like rotation or backgrounding.
  • Ensure your app does not leak memory or crash when saving/restoring state to pass store reviews.
Self-Check: Your app takes 5 seconds to load this screen. What's likely wrong?

It is likely your app is saving or restoring too much data in onSaveInstanceState() or onRestoreInstanceState(). Large or complex objects slow down the UI thread and delay rendering.

Check if you are saving unnecessary data or performing heavy operations during state saving. Move large data to ViewModel or persistent storage instead.

Also verify you are not blocking the main thread with slow I/O during state restoration.

Key Result
Saving instance state in Android is lightweight and fast when used for small data. Avoid saving large objects to keep UI smooth at 60fps and ensure quick app startup. Use ViewModel or persistent storage for complex data. Proper state saving prevents data loss during rotation and meets store stability requirements.

Practice

(1/5)
1. What is the main purpose of onSaveInstanceState in Android Kotlin apps?
easy
A. To initialize UI components when the app starts
B. To permanently store data in a database
C. To save UI data temporarily during events like screen rotation
D. To handle user input events like button clicks

Solution

  1. Step 1: Understand the role of onSaveInstanceState

    This method is called before an activity might be destroyed, such as during screen rotation, to save temporary UI data.
  2. Step 2: Differentiate from other data storage methods

    Permanent storage like databases is not handled here; onSaveInstanceState is for short-term state saving only.
  3. Final Answer:

    To save UI data temporarily during events like screen rotation -> Option C
  4. Quick Check:

    onSaveInstanceState saves temporary UI state [OK]
Hint: Remember: onSaveInstanceState saves temporary UI data [OK]
Common Mistakes:
  • Confusing onSaveInstanceState with permanent storage
  • Thinking it initializes UI components
  • Assuming it handles user input events
2. Which of the following is the correct way to save a string value "username" in onSaveInstanceState?
easy
A. bundle.putString("username", username)
B. outState.putString("username", username)
C. savedInstanceState.putString("username", username)
D. state.putString("username", username)

Solution

  1. Step 1: Identify the correct parameter name in onSaveInstanceState

    The Bundle parameter is named outState in onSaveInstanceState method.
  2. Step 2: Use the correct method to save a string

    Use outState.putString(key, value) to save the string value.
  3. Final Answer:

    outState.putString("username", username) -> Option B
  4. Quick Check:

    Use outState to save data in onSaveInstanceState [OK]
Hint: Use outState.putString() inside onSaveInstanceState [OK]
Common Mistakes:
  • Using savedInstanceState inside onSaveInstanceState
  • Using undefined variable names like bundle or state
  • Confusing parameter names in lifecycle methods
3. Given this code snippet inside an Activity:
override fun onSaveInstanceState(outState: Bundle) {
  super.onSaveInstanceState(outState)
  outState.putInt("score", 10)
}

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  val score = savedInstanceState?.getInt("score") ?: 0
  println(score)
}

What will be printed after a screen rotation?
medium
A. Crash due to NullPointerException
B. 0
C. null
D. 10

Solution

  1. Step 1: Understand saving the score in onSaveInstanceState

    The score 10 is saved in the outState bundle before the activity is destroyed.
  2. Step 2: Restore score in onCreate after rotation

    savedInstanceState contains the saved bundle, so getInt("score") returns 10, not null or 0.
  3. Final Answer:

    10 -> Option D
  4. Quick Check:

    Saved state restores score = 10 after rotation [OK]
Hint: savedInstanceState?.getInt() returns saved value or default [OK]
Common Mistakes:
  • Assuming savedInstanceState is always null
  • Forgetting to call super.onSaveInstanceState
  • Expecting 0 instead of restored value
4. What is wrong with this code snippet for saving instance state?
override fun onSaveInstanceState(outState: Bundle) {
  outState.putInt("count", count)
}

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  val count = savedInstanceState?.getInt("count") ?: 0
}
medium
A. Missing call to super.onSaveInstanceState in onSaveInstanceState
B. Using wrong key name "count"
C. Not initializing count variable before saving
D. Not checking savedInstanceState for null in onCreate

Solution

  1. Step 1: Check onSaveInstanceState method

    It lacks a call to super.onSaveInstanceState(outState), which is required to save default state.
  2. Step 2: Verify other parts

    Key name "count" is consistent, count variable assumed initialized, and null check is done in onCreate.
  3. Final Answer:

    Missing call to super.onSaveInstanceState in onSaveInstanceState -> Option A
  4. Quick Check:

    Always call super.onSaveInstanceState [OK]
Hint: Always call super.onSaveInstanceState in override [OK]
Common Mistakes:
  • Forgetting super call in onSaveInstanceState
  • Using inconsistent keys for saving/restoring
  • Ignoring null checks on savedInstanceState
5. You want to save a checkbox state and a user input text during screen rotation. Which approach correctly saves and restores both in an Activity?
hard
A. Save checkbox state and text in onSaveInstanceState using outState.putBoolean and outState.putString, then restore in onCreate using savedInstanceState?.getBoolean and getString
B. Save checkbox state only in onSaveInstanceState, restore text from a global variable
C. Save text in onPause and checkbox state in onStop, restore both in onResume
D. Use SharedPreferences to save checkbox and text, restore in onCreate

Solution

  1. Step 1: Use onSaveInstanceState for temporary UI data

    Checkbox state (boolean) and text (string) should be saved in outState bundle in onSaveInstanceState.
  2. Step 2: Restore saved data in onCreate

    Use savedInstanceState?.getBoolean and getString to restore checkbox and text after rotation.
  3. Final Answer:

    Save checkbox state and text in onSaveInstanceState using outState.putBoolean and outState.putString, then restore in onCreate using savedInstanceState?.getBoolean and getString -> Option A
  4. Quick Check:

    Use onSaveInstanceState and savedInstanceState for UI state [OK]
Hint: Save UI data in onSaveInstanceState, restore in onCreate [OK]
Common Mistakes:
  • Using global variables that reset on rotation
  • Saving data in lifecycle methods not meant for state
  • Using persistent storage for temporary UI state
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