Understanding the lifecycle helps you know when your app starts, stops, or pauses. This stops bugs caused by wrong timing or missing steps.
Why understanding lifecycle prevents bugs in Android Kotlin
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Initialize your app here
}
override fun onStart() {
super.onStart()
// App is visible
}
override fun onResume() {
super.onResume()
// App is interacting with the user
}
override fun onPause() {
super.onPause()
// App is partially visible or about to go to background
}
override fun onStop() {
super.onStop()
// App is no longer visible
}
override fun onDestroy() {
super.onDestroy()
// Clean up resources
}Each method is called automatically by the system at different times.
Always call super to keep the system lifecycle working properly.
override fun onPause() {
super.onPause()
// Pause video playback here
}override fun onResume() {
super.onResume()
// Restart animations or refresh data
}override fun onDestroy() {
super.onDestroy()
// Release camera or sensor resources
}This example prints messages at each lifecycle stage. It helps you see when each method runs as you open, use, and close the app.
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) println("App Created") } override fun onStart() { super.onStart() println("App Started - Visible") } override fun onResume() { super.onResume() println("App Resumed - User can interact") } override fun onPause() { super.onPause() println("App Paused - Partially visible") } override fun onStop() { super.onStop() println("App Stopped - Not visible") } override fun onDestroy() { super.onDestroy() println("App Destroyed - Clean up") } }
Missing lifecycle calls can cause your app to crash or behave strangely.
Use lifecycle methods to manage resources and user experience smoothly.
Testing your app by switching between apps helps you see lifecycle in action.
Lifecycle methods tell your app what to do at each stage.
Using them correctly prevents bugs and improves app performance.
Always handle important tasks like saving data or releasing resources in lifecycle methods.
Practice
Solution
Step 1: Understand lifecycle role
The lifecycle tells the app when to start, pause, resume, or stop activities.Step 2: Connect lifecycle to bug prevention
Managing these states properly avoids bugs like data loss or crashes during screen rotation or app backgrounding.Final Answer:
Because it helps manage app behavior during screen rotations and backgrounding -> Option AQuick Check:
Lifecycle management = Prevent bugs [OK]
- Thinking lifecycle fixes bugs automatically
- Ignoring lifecycle causes data loss
- Believing lifecycle only affects UI speed
Solution
Step 1: Identify saving data method
onSaveInstanceState() is called before the activity might be destroyed to save UI state.Step 2: Compare other methods
onCreate() initializes, onDestroy() is too late for saving state, onStart() is for starting UI.Final Answer:
onSaveInstanceState() -> Option BQuick Check:
Save data before destroy = onSaveInstanceState() [OK]
- Using onDestroy() to save data (too late)
- Confusing onCreate() with saving state
- Not saving state causes data loss on rotation
override fun onPause() {
super.onPause()
saveUserData()
}
override fun onStop() {
super.onStop()
releaseResources()
}
What happens if the app goes to background and then returns?Solution
Step 1: Analyze onPause() and onStop() calls
When app backgrounds, onPause() then onStop() are called in order.Step 2: Understand method effects
saveUserData() saves data on pause; releaseResources() frees resources on stop; on resume, resources can be reacquired.Final Answer:
User data is saved and resources are released when app backgrounds; resources are reacquired on resume -> Option CQuick Check:
onPause + onStop manage data and resources correctly [OK]
- Assuming onPause() is skipped
- Thinking onStop() causes crash
- Believing resources stay allocated forever
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
loadUserData()
}
fun loadUserData() {
// loads data from network
}
What is the main issue here?Solution
Step 1: Understand onCreate() on rotation
onCreate() is called again on rotation, so loadUserData() runs multiple times.Step 2: Identify bug cause
Repeated network calls cause performance issues and bugs like duplicated data loading.Final Answer:
loadUserData() is called multiple times causing repeated network calls on rotation -> Option AQuick Check:
onCreate repeats on rotation = repeated calls [OK]
- Thinking onCreate is not called on rotation
- Placing network calls in onDestroy()
- Ignoring savedInstanceState check
Solution
Step 1: Identify correct save and restore methods
onSaveInstanceState() saves temporary UI data before rotation; onRestoreInstanceState() restores it after.Step 2: Explain why other methods are incorrect
onDestroy() may not always be called; onPause()/onResume() run on many events; onStart()/onStop() manage visibility, not state saving.Final Answer:
Use onSaveInstanceState() to save data and onRestoreInstanceState() to restore it because they handle temporary UI state during configuration changes -> Option DQuick Check:
Save/restore UI state = onSaveInstanceState/onRestoreInstanceState [OK]
- Using onDestroy() which may not be called
- Confusing onPause() with state saving
- Restoring data in onStop() instead of restore methods
Ready to prove it?
Pass the test and this pattern moves unknown
