Activity Life Cycle Example
Activity Life Cycle
As a user navigates through, out of, and back to your app, the
Activity
instances in your app transition through
different states in their lifecycle.
The Activity
class provides a number of callbacks
that allow the activity to know that a state has changed: that the
system is creating, stopping, or resuming an activity, or destroying
the process in which the activity resides.
Within the lifecycle callback methods, you can declare how your activity
behaves when the user leaves and re-enters the activity. For example, if you're
building a streaming video player, you might pause the video and terminate the
network connection when the user switches to another app. When the user returns,
you can reconnect to the network and allow the user to resume the video from the
same spot. In other words, each callback allows you to perform specific work
that's appropriate to a given change of state. Doing the right work at the right
time and handling transitions properly make your app more robust and performant.
For example, good implementation of the lifecycle callbacks can help ensure that
your app avoids:
- Crashing if the user receives a phone call or switches to another app while using your app.
- Consuming valuable system resources when the user is not actively using it.
- Losing the user's progress if they leave your app and return to it at a later time.
- Crashing or losing the user's progress when the screen rotates between landscape and portrait orientation.
onCreate()
You must implement this callback,
which fires when the system first creates the activity. On activity creation,
the activity enters the Created state. In the onCreate() method, you perform basic
application startup logic that should happen only once for the entire life of
the activity. For example, your implementation of onCreate() might bind data to lists,
associate the activity with a ViewModel, and instantiate some class-scope
variables. This method receives the parameter savedInstanceState, which is
a Bundle object containing the
activity's previously saved state. If the activity has never existed before,
the value of the Bundle object is null.
onStart()
When the activity
enters the Started state, the system invokes this callback. The onStart() call
makes the activity visible to the user, as the app prepares for the activity to
enter the foreground and become interactive. For example, this method is where
the app initializes the code that maintains the UI.
onStart()
When the activity
enters the Started state, the system invokes this callback. The onStart() call
makes the activity visible to the user, as the app prepares for the activity to
enter the foreground and become interactive. For example, this method is where
the app initializes the code that maintains the UI.
onResume()
When the activity enters the Resumed state, it comes to the foreground, and then the system invokes the onResume() callback. This is the state in which the app interacts with the user. The app stays in this state until something happens to take focus away from the app. Such an event might be, for instance, receiving a phone call, the user’s navigating to another activity, or the device screen’s turning off.
When the activity moves to the resumed state, any lifecycle-aware component tied to the activity's lifecycle will receive the ON_RESUME event. This is where the lifecycle components can enable any functionality that needs to run while the component is visible and in the foreground, such as starting a camera preview.
When an interruptive event occurs, the activity enters the Paused state, and the system invokes the onPause()callback.
onPause()
The system calls this method as the first indication that the user is leaving your activity (though it does not always mean the activity is being destroyed); it indicates that the activity is no longer in the foreground (though it may still be visible if the user is in multi-window mode). Use the onPause() method to pause or adjust operations that should not continue (or should continue in moderation) while the Activity is in the Paused state, and that you expect to resume shortly. There are several reasons why an activity may enter this state. For example:
· Some event interrupts app execution, as described in the onResume() section. This is the most common case.
· In Android 7.0 (API level 24) or higher, multiple apps run in multi-window mode. Because only one of the apps (windows) has focus at any time, the system pauses all of the other apps.
· A new, semi-transparent activity (such as a dialog) opens. As long as the activity is still partially visible but not in focus, it remains paused.
When the activity moves to the paused state, any lifecycle-aware component tied to the activity's lifecycle will receive the ON_PAUSE event. This is where the lifecycle components can stop any functionality that does not need to run while the component is not in the foreground, such as stopping a camera preview.
onStop()
When your
activity is no longer visible to the user, it has entered the Stopped state,
and the system invokes the
When the activity moves to the stopped state, any lifecycle-aware component tied to the activity's lifecycle will receive the
onStop()
callback. This may occur, for example,
when a newly launched activity covers the entire screen. The system may also
call onStop()
when the activity has finished running,
and is about to be terminated.When the activity moves to the stopped state, any lifecycle-aware component tied to the activity's lifecycle will receive the
ON_STOP
event.
This is where the lifecycle components can stop any functionality that does not
need to run while the component is not visible on the screen.
In the
onStop()
method, the app should release or
adjust resources that are not needed while the app is not visible to the user.
For example, your app might pause animations or switch from fine-grained to
coarse-grained location updates. Using onStop()
instead of onPause()
ensures that UI-related work continues,
even when the user is viewing your activity in multi-window mode.
You should
also use
onStop()
to perform relatively CPU-intensive
shutdown operations. For example, if you can't find a more opportune time to
save information to a database, you might do so during onStop()
. The following example shows an implementation
of onStop()
that saves the contents of a draft note
to persistent storage:
onDestroy()
onDestroy() is called before the
activity is destroyed. The system invokes this callback either because:
1.
the activity is finishing (due to
the user completely dismissing the activity or due to finish() being called on the
activity), or
2.
the system is temporarily destroying
the activity due to a configuration change (such as device rotation or
multi-window mode)
When
the activity moves to the destroyed state, any lifecycle-aware component tied
to the activity's lifecycle will receive the ON_DESTROY event. This is where the
lifecycle components can clean up anything it needs to before the Activity is
destroyed.
Instead
of putting logic in your Activity to determine why it is being destroyed you
should use a ViewModelobject to contain the relevant
view data for your Activity. If the Activity is going to be recreated due to a
configuration change the ViewModel does not have to do anything since it will
be preserved and given to the next Activity instance. If the Activity is not
going to be recreated then the ViewModel will have the onCleared()method called where it can
clean up any data it needs to before being destroyed.
Comments
Post a Comment