- Android Application Development Cookbook(Second Edition)
- Rick Boyer Kyle Mew
- 613字
- 2021-07-09 19:36:20
Understanding the activity lifecycle
The Android OS is a dangerous place for an activity. The demand for resources on a battery-operated platform is managed quite ruthlessly by the system. Our activities can be dumped from memory when it's running low, without even a moment's notice and along with any data they contain. Therefore, it is essential to understand the activity lifecycle.
The following diagram shows the stages through which an activity passes during its lifetime:

Along with the stages, the diagram also shows the methods that can be overridden. As you can see, we've already utilized most of these methods in the preceding recipes. Hopefully, getting the big picture will help in your understanding.
Getting ready
Create a new project in Android Studio with a Blank Activity, and call it ActivityLifecycle
. We will use the (autogenerated) TextView
method to display the state information.
How to do it...
To see the application move through the various stages, we will create methods for all the stages:
- Open
activity_main.xml
and add an ID to the autogeneratedTextView
:android:id="@+id/textViewState"
- The remaining steps will be in
MainActivity.java
. Add the following global declaration:private TextView mTextViewState;
- Modify the
onCreate()
method to saveTextView
and set the initial text:mTextViewState = (TextView)findViewById(R.id.textViewState); mTextViewState.setText("onCreate()\n");
- Add the following methods to handle the remaining events:
@Override protected void onStart() { super.onStart(); mTextViewState.append("onStart()\n"); } @Override protected void onResume() { super.onResume(); mTextViewState.append("onResume()\n"); } @Override protected void onPause() { super.onPause(); mTextViewState.append("onPause()\n"); } @Override protected void onStop() { super.onStop(); mTextViewState.append("onStop()\n"); } @Override protected void onRestart() { super.onRestart(); mTextViewState.append("onRestart()\n"); } @Override protected void onDestroy() { super.onDestroy(); mTextViewState.append("onDestroy()\n"); }
- Run the application and observe what happens when the activity is interrupted by pressing the Back and Home keys. Try other actions, such as task switching, to see how they impact your application.
How it works...
Our activity can exist in one of these three states: active, paused, or stopped. There is also a fourth state, destroyed, but we can safely ignore it:
- An activity is in the
active
state when its interface is available for the user. It persists fromonResume()
untilonPause()
, which is brought about when another activity comes to the foreground. If this new activity does not entirely obscure our activity, then ours will remain in thepaused
state until the new activity is finished or dismissed. It will then immediately callonResume()
and continue. - When a newly started activity fills the screen or makes our activity invisible, then our activity will enter the
stopped
state, and the resumption will always invoke a call toonRestart()
. - When an activity is in either the
paused
orstopped
state, the operating system can (and will) remove it from the memory when the memory is low or when other applications demand it. - It is worth noting that we never actually see the results of the
onDestroy()
method, as the activity is removed by this point. If you want to explore these methods further, then it is well worth employingActivity.isFinishing()
to see whether the activity is really finishing beforeonDestroy()
is executed, as seen in the following snippet:@Override public void onPause() { super.onPause(); mTextView.append("onPause()\n "); if (isFinishing()){ mTextView.append(" ... finishing"); } }
Tip
When implementing these methods, always call the superclass before doing any work.
There's more...
Shutting down an activity
To shut down an activity, directly call its finish()
method, which in turn calls onDestroy()
. To perform the same action from a child activity, use finishFromChild(Activity child)
, where child
is the calling subactivity.
It is often useful to know whether an activity is being shut down or merely paused, and the isFinishing(boolean)
method returns a value that indicates which of these two states the activity is in.
- Azure IoT Development Cookbook
- 構建移動網站與APP:HTML 5移動開發入門與實戰(跨平臺移動開發叢書)
- Learning AWS Lumberyard Game Development
- 重學Java設計模式
- Learning Probabilistic Graphical Models in R
- 大話Java:程序設計從入門到精通
- FFmpeg開發實戰:從零基礎到短視頻上線
- Functional Python Programming
- 3ds Max 2018從入門到精通
- C++服務器開發精髓
- JavaScript Mobile Application Development
- HTML5 and CSS3:Building Responsive Websites
- 面向物聯網的Android應用開發與實踐
- Microsoft Azure Security
- TensorFlow+Keras深度學習算法原理與編程實戰