两分钟让你彻底明白Android Activity生命
来源:互联网 发布:mac os 菜单栏 编辑:程序博客网 时间:2024/04/29 18:44
大家好,为大家详解一下Android中Activity的生命周期,但是像网上大多数文章一样,基本都是翻译Android API,过于笼统,相信大家看了,会有一点点的帮助 ,但是还不能完全吃透,所以我今天特意在重新总结一下。
首先看一下Android api中所提供的Activity生命周期图(不明白的,可以看完整篇文章,在回头看一下这个图,你会明白的):
Activity其实是继承了ApplicationContext这个类,我们可以重写以下方法,如下代码:
1
public
class
Activity
extends
ApplicationContext {
2
protected
void
onCreate(Bundle savedInstanceState);
3
protected
void
onStart();
4
protected
void
onRestart();
5
protected
void
onResume();
6
protected
void
onPause();
7
protected
void
onStop();
8
protected
void
onDestroy();
9
}
01
package
com.tutor.activitydemo;
02
import
android.app.Activity;
03
import
android.os.Bundle;
04
import
android.util.Log;
05
public
class
ActivityDemo
extends
Activity {
06
private
static
final
String TAG =
"ActivityDemo"
;
07
public
void
onCreate(Bundle savedInstanceState) {
08
super
.onCreate(savedInstanceState);
09
setContentView(R.layout.main);
10
Log.e(TAG,
"start onCreate"
);
11
}
12
@Override
13
protected
void
onStart() {
14
super
.onStart();
15
Log.e(TAG,
"start onStart"
);
16
}
17
@Override
18
protected
void
onRestart() {
19
super
.onRestart();
20
Log.e(TAG,
"start onRestart"
);
21
}
22
@Override
23
protected
void
onResume() {
24
super
.onResume();
25
Log.e(TAG,
"start onResume"
);
26
}
27
@Override
28
protected
void
onPause() {
29
super
.onPause();
30
Log.e(TAG,
"start onPause"
);
31
}
32
@Override
33
protected
void
onStop() {
34
super
.onStop();
35
Log.e(TAG,
"start onStop"
);
36
}
37
@Override
38
protected
void
onDestroy() {
39
super
.onDestroy();
40
Log.e(TAG,
"start onDestroy"
);
41
}
42
}
01
package
com.tutor.activitydemo;
02
import
android.app.Activity;
03
import
android.os.Bundle;
04
import
android.util.Log;
05
public
class
ActivityDemo
extends
Activity {
06
private
static
final
String TAG =
"ActivityDemo"
;
07
public
void
onCreate(Bundle savedInstanceState) {
08
super
.onCreate(savedInstanceState);
09
setContentView(R.layout.main);
10
Log.e(TAG,
"start onCreate"
);
11
}
12
@Override
13
protected
void
onStart() {
14
super
.onStart();
15
Log.e(TAG,
"start onStart~~~"
);
16
}
17
@Override
18
protected
void
onRestart() {
19
super
.onRestart();
20
Log.e(TAG,
"start onRestart"
);
21
}
22
@Override
23
protected
void
onResume() {
24
super
.onResume();
25
Log.e(TAG,
"start onResume"
);
26
}
27
@Override
28
protected
void
onPause() {
29
super
.onPause();
30
Log.e(TAG,
"start onPause"
);
31
}
32
@Override
33
protected
void
onStop() {
34
super
.onStop();
35
Log.e(TAG,
"start onStop"
);
36
}
37
@Override
38
protected
void
onDestroy() {
39
super
.onDestroy();
40
Log.e(TAG,
"start onDestroy"
);
41
}
42
}
第三步:运行上述工程,效果图如下(没什么特别的):
核心在Logcat视窗里,如果你还不会用Logcat你可以看一下我的这篇文章 Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e) ,我们打开应用时先后执行了onCreate()->onStart()->onResume三个方法,看一下LogCat视窗如下:
BACK键:
当我们按BACK键时,我们这个应用程序将结束,这时候我们将先后调用onPause()->onStop()->onDestory()三个方法,如下图所示:
BACK键:
当我们按BACK键时,我们这个应用程序将结束,这时候我们将先后调用onPause()->onStop()->onDestory()三个方法,如下图所示:
HOME键:
当我们打开应用程序时,比如浏览器,我正在浏览NBA新闻,看到一半时,我突然想听歌,这时候我们会选择按HOME键,然后去打开音乐应用程序,而当 我们按HOME的时候,Activity先后执行了onPause()->onStop()这两个方法,这时候应用程序并没有销毁.如下图所示:
而当我们再次启动ActivityDemo应用程序时,则先后分别执行了onRestart()->onStart()->onResume()三个方法,如下图所示:
这里我们会引出一个问题,当我们按HOME键,然后再进入ActivityDemo应用时,我们的应用的状态应该是和按HOME键之前的状态是一样的,同样为了方便理解,在这里我将ActivityDemo的代码作一些修改,就是增加一个EditText。
第四步:修改main.xml布局文件(增加了一个EditText),代码如下:
01
<?xml version=
"1.0"
encoding=
"utf-8"
?>
02
<LinearLayout xmlns:android=
"http://schemas.android.com/apk/res/android"
03
android:orientation=
"vertical"
04
android:layout_width=
"fill_parent"
05
android:layout_height=
"fill_parent"
06
>
07
<TextView
08
android:layout_width=
"fill_parent"
09
android:layout_height=
"wrap_content"
10
android:text=
"@string/hello"
11
/>
12
<EditText
13
android:id=
"@+id/editText"
14
android:layout_width=
"fill_parent"
15
android:layout_height=
"wrap_content"
16
/>
17
</LinearLayout>
001
package
com.tutor.activitydemo;
002
import
android.app.Activity;
003
import
android.os.Bundle;
004
import
android.util.Log;
005
import
android.widget.EditText;
006
public
class
ActivityDemo
extends
Activity {
007
private
static
final
String TAG =
"ActivityDemo"
;
008
private
EditText mEditText;
009
//定义一个String 类型用来存取我们EditText输入的值
010
private
String mString;
011
public
void
onCreate(Bundle savedInstanceState) {
012
super
.onCreate(savedInstanceState);
013
setContentView(R.layout.main);
014
mEditText = (EditText)findViewById(R.id.editText);
015
Log.e(TAG,
"start onCreate"
);
016
}
017
@Override
018
protected
void
onStart() {
019
super
.onStart();
020
Log.e(TAG,
"start onStart"
);
021
}
022
//当按HOME键时,然后再次启动应用时,我们要恢复先前状态
023
@Override
024
protected
void
onRestart() {
025
super
.onRestart();
026
mEditText.setText(mString);
027
Log.e(TAG,
"start onRestart"
);
028
}
029
@Override
030
protected
void
onResume() {
031
super
.onResume();
032
Log.e(TAG,
"start onResume"
);
033
}
034
//当我们按HOME键时,我在onPause方法里,将输入的值赋给mString
035
@Override
036
protected
void
onPause() {
037
super
.onPause();
038
mString = mEditText.getText().toString();
039
Log.e(TAG,
"start onPause"
);
040
}
041
@Override
042
protected
void
onStop() {
043
super
.onStop();
044
Log.e(TAG,
"start onStop"
);
045
}
046
@Override
047
protected
void
onDestroy() {
048
super
.onDestroy();
049
Log.e(TAG,
"start onDestroy"
);
050
}
051
}
package
com.tutor.activitydemo;
052
import
android.app.Activity;
053
import
android.os.Bundle;
054
import
android.util.Log;
055
import
android.widget.EditText;
056
public
class
ActivityDemo
extends
Activity {
057
private
static
final
String TAG =
"ActivityDemo"
;
058
private
EditText mEditText;
059
//定义一个String 类型用来存取我们EditText输入的值
060
private
String mString;
061
public
void
onCreate(Bundle savedInstanceState) {
062
super
.onCreate(savedInstanceState);
063
setContentView(R.layout.main);
064
mEditText = (EditText)findViewById(R.id.editText);
065
Log.e(TAG,
"start onCreate"
);
066
}
067
@Override
068
protected
void
onStart() {
069
super
.onStart();
070
Log.e(TAG,
"start onStart"
);
071
}
072
//当按HOME键时,然后再次启动应用时,我们要恢复先前状态
073
@Override
074
protected
void
onRestart() {
075
super
.onRestart();
076
mEditText.setText(mString);
077
Log.e(TAG,
"start onRestart"
);
078
}
079
@Override
080
protected
void
onResume() {
081
super
.onResume();
082
Log.e(TAG,
"start onResume"
);
083
}
084
//当我们按HOME键时,我在onPause方法里,将输入的值赋给mString
085
@Override
086
protected
void
onPause() {
087
super
.onPause();
088
mString = mEditText.getText().toString();
089
Log.e(TAG,
"start onPause"
);
090
}
091
@Override
092
protected
void
onStop() {
093
super
.onStop();
094
Log.e(TAG,
"start onStop"
);
095
}
096
@Override
097
protected
void
onDestroy() {
098
super
.onDestroy();
099
Log.e(TAG,
"start onDestroy"
);
100
}
101
}
第七步:重新运行ActivityDemo程序,重复第五步操作,当我们按HOME键时,再次启动应用程序时,EditText里有上次输入的"Frankie"字样,如下图如示:
OK,大功基本告成,这时候大家可以在回上面看一下Activity生命周期图,我想大家应该完全了解了Activity的生命周期了,不知道你了解了没?
- 两分钟让你彻底明白Android Activity生命
- 两分钟彻底让你明白Android Activity生命周期(图文)!
- 两分钟彻底让你明白Android Activity生命周期(图文)
- 两分钟彻底让你明白Android Activity生命周期(图文)!
- 两分钟彻底让你明白Android Activity生命周期(图文)
- 两分钟彻底让你明白Android Activity生命周期(图文)!
- 两分钟彻底让你明白Android Activity生命周期
- 两分钟彻底让你明白Android Activity生命周期(图文)!
- 两分钟彻底让你明白Android Activity生命周期(图文)!
- 两分钟彻底让你明白Android Activity生命周期(图文)!
- 两分钟彻底让你明白Android Activity生命周期(图文)!
- 两分钟彻底让你明白Android Activity生命周期(图文)!
- 两分钟彻底让你明白Android Activity生命周期(图文)
- 两分钟彻底让你明白Android Activity生命周期(图文)!
- 两分钟彻底让你明白Android Activity生命周期(图文)!
- 两分钟彻底让你明白Android Activity生命周期(图文)!
- 两分钟彻底让你明白Android Activity生命周期
- 两分钟彻底让你明白Android Activity生命周期(图文)!
- HDU1231--最大连续子序列
- SGU 115 巨水题 (只为统计做题个数)
- 修改Ubuntu 12.04和Windows 7共存时的启动顺序
- java二维码生成与解析代码实现
- awk命令
- 两分钟让你彻底明白Android Activity生命
- Insert Interval
- Come Back!
- 百练 2688 求字母的个数
- 22个Java经典实例 带完美注释
- spring和struts1和jpa的集成
- 黑马程序员_交通灯管理系统
- ACM做题细节!
- 第五次课后作业