学习 android 几天时间了,发现android中,页面切换实际上是不同的activity进行切换,下面来简单记录一下activity的生命周期。
先来到官网查看API(靠着吃饭的东西,一定要有查api的习惯),拖到下面,我们可以看到一张图:
这张图很清晰的activity的执行过程,如果还是没怎么理解,下面写个例子与其分析,详细的介绍执行过程中activity调用了哪些方法。
FirstActivity1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
| public class FirstActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
System.out.println("firstActivity call oncreate");
Button bt = (Button) findViewById(R.id.bt);
bt.setOnclickListener(new btOnClickListener());
}
class btOnClickListener implements OnClickListener {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Intent i = new Intent();
i.setClass(FirstActivity.this, SecondActivity.class);
startActivity(i);
}
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
System.out.println("firstActivity call onstart");
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
System.out.println("firstActivity call onrestart");
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
System.out.println("firstActivity call onresume");
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
System.out.println("firstActivity call onpause");
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
System.out.println("firstActivity call onstop");
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
System.out.println("firstActivity call ondestory");
}
}
|
SecondActivity1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
| public class SecondActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
System.out.println("secondActivity call oncreate");
Button bt = (Button) findViewById(R.id.bt);
bt.setOnclickListener(new btOnClickListener());
class btOnClickListener implements OnClickListener {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Intent i = new Intent();
i.setClass(SecondActivity.this, FirstActivity.class);
startActivity(i);
**SecondActivity.this.finish();**
}
}
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
System.out.println("secondActivity call onstart");
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
System.out.println("secondActivity call onrestart");
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
System.out.println("secondActivity call onresume");
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
System.out.println("secondActivity call onpause");
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
System.out.println("secondActivity call onstop");
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
System.out.println("secondActivity call ondestory");
}
}
|
上面代码非常简单,FirshActivity
与 SecondActivity
都复写了 Activity 的一些基本方法,然后每个activity中都有个按钮(布局页面就不提供了),点击按钮后,在两个activity之间进行切换,先将启动程序设为 FirshActivity
,然后运行,会看到以下输出:
SecondActivity1
2
3
| firstActivity call oncreate
firstActivity call onstart
firstActivity call onresume
|
接着点击按钮:
SecondActivity1
2
3
4
5
| firstActivity call onpause
secondActivity call oncreate
secondActivity call onstart
secondActivity call onresume
firstActivity call onstop
|
在接着在点击按钮返回FirstActivity:
SecondActivity1
2
3
4
5
6
| secondActivity call onpause
firstActivity call **onrestart**
firstActivity call onstart
firstActivity call onresume
secondActivity call onstop
**secondActivity call ondestory**
|
通过运行可以很清晰的知道,当一个activity运行的时候,会依次执行 onCreate
–> onStart
–> onresume
onCreate
是当程序运行的时候开始调用,一般用于加载布局,监听事件等
onStart
当你能看到界面的时候调用
onresume
当获得焦点后调用,即你能操作这个activity的一些控件的时候
当我们点击按钮,跳转到另外一个activity的时候,依次执行了 onPause
–> onCreate
–> onStart
–> onResume
–> onStop
onPause
注意,这里是第一个activity调用的,当调用另外一个activity时被调用,比如你在使用过程中,突然来了一个电话,这时候会调用电话这个activity,onpause 就被调用了,一般用于保存数据
onCreate
由上面可知
onStart
由上面可知
onResume
由上面可知
onStop
当一个activity被另一个activity完全遮住时,调用stop,注意是完全,如果是一个对话框,覆盖在了这个activity上面,不会被调用
当从另外一个activity返回回来时,调用了 onPause
–> onRestart
–> onStart
–> onResume
–> onStop
–> onDestory
onPause
因为切换到了FirstActivity,所以当前的被暂停
onRestart
注意,回到第一个activity后,并不是重新 onCreate
,而是 onRestart
,因为第一个activity并没有被销毁
onStart
由上面可知
onResume
由上面可知
onStop
因为此时第一个activity完全遮挡住了第二个activity
onDestory
注意,该方法在第一个activity中没有被调用而在这里调用了,请仔细上上面代码的加粗部分,只有在你程序中调用了 finish()
方法,或资源不够用时才会被销毁,销毁之后再调用这个activity,必须重新创建。