官术网_书友最值得收藏!

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:

  1. Open activity_main.xml and add an ID to the autogenerated TextView:
    android:id="@+id/textViewState"
  2. The remaining steps will be in MainActivity.java. Add the following global declaration:
    private TextView mTextViewState;
  3. Modify the onCreate() method to save TextView and set the initial text:
    mTextViewState = (TextView)findViewById(R.id.textViewState);
    mTextViewState.setText("onCreate()\n");
  4. 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");
    }
  5. 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 from onResume() until onPause(), 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 the paused state until the new activity is finished or dismissed. It will then immediately call onResume() 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 to onRestart().
  • When an activity is in either the paused or stopped 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 employing Activity.isFinishing() to see whether the activity is really finishing before onDestroy() 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.

主站蜘蛛池模板: 姚安县| 含山县| 怀集县| 葵青区| 皮山县| 长阳| 临洮县| 凤凰县| 屏东县| 高唐县| 霍城县| 梁山县| 历史| 阳谷县| 呼和浩特市| 定州市| 清镇市| 姜堰市| 嘉兴市| 通山县| 万盛区| 斗六市| 扎赉特旗| 东安县| 武隆县| 宜良县| 临安市| 赣榆县| 宜宾市| 曲麻莱县| 通渭县| 安多县| 北辰区| 松潘县| 桃源县| 胶州市| 鹤壁市| 孟州市| 新疆| 佳木斯市| 兴和县|