Android Activity 生命周期及Task运行过程

首先我们来看一下Android api中所提供的Activity生命周期图.

State diagram for an Android Activity Lifecycle.

Activity其实是继承了ApplicationContext这个类,我们可以重写它的生命周期函数,如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 public class Activity extends ApplicationContext {
        protected void onCreate(Bundle savedInstanceState);
       
        protected void onStart();  
       
        protected void onRestart();
       
        protected void onResume();
       
        protected void onPause();
       
        protected void onStop();
       
        protected void onDestroy();
    }

为了便于大家理解,下面我们通过Demo来理解Activity生命周期函数调用情况.

我建了两个Activity:FirstActivity和SecondActivity 两个Activity都实现7个生命周期函数,并打印出函数的方法名.

然后我们通过FirstActivity来启动SecondActivity,然后点击back键返回到第一个Activity.

我们可以看到如下输入:

image

解释:

首先我们启动第一个Activity的时候,便于调用第一个Activity的onCreate、onStart、onResume方法。

然后当我们点击启动第二个Activity的时候,第一个Activity的onPause方法被调用。第二个Activity的onCreate、onStart、onResume方法被调用,因为第一个Activity对用户已经不可见了,所以第一个Activity的onStop方法将被调用。

当我们再点击back按钮的时候,第二个Activity的onPause方法会被调用,接着调用第一个Activity的onRestart、onStart、onResume方法。因为第二个Activity对用户也变成不可见的,所以他的onStop方法会被调用,并且会被移除Stack,接受调用onDestroy方法被销毁。

所以,如果我们再去启动第二个Activity的话,将会重新调用onCreat方法。

 

但是如果我们把第二个Activity设置成对话框模式的话,像下面这种:

image

那么我们启动第二个Activity的时候会发现如下输出:

image

这时并没有调用第一个Activity的onStop方法,因为第一个Activity对用户来说还是可见的,只是不能获取用户的焦点。

 

 

我们再来了解一下Task的运行过程。我们三个Activity:FirstActivity、SecondActivity、ThirdActivity。然后第一个Activity调用第二个Activity,第二个Activity调用第三个Activity,第三个Activity打开一个发送短信的界面。这时我们的activity对象将会依次被压到Stack中。如图:

image

我们逐步点击返回键时,Stack中的Activity对象将会被移除。如下:

image

这样也能让用户获取更好的体验。

 

除非注明,Coder文章均为原创,转载请以链接形式标明本文地址

本文地址:http://www.alonemonkey.com/android-life-and-task.html

本文链接:http://www.alonemonkey.com/android-life-and-task.html