android生命周期Word格式文档下载.docx
《android生命周期Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《android生命周期Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
activity被暂停或收回cpu和其他资源时调用,该方法用于保存活动状态的,也是保护现场,压栈吧!
onStop():
activity被停止并转为不可见阶段及后续的生命周期事件时调用。
onRestart():
重新启动activity时调用。
该活动仍在栈中,而不是启动新的活动。
onDestroy():
activity被完全从系统内存中移除时调用,该方法被调用可能是因为有人直接调用onFinish()方法或者系统决定停止该活动以释放资源!
以上七个方法分别在四个阶段按照一定顺序调用:
1.开始Activity:
这个阶段依次执行3个生命周期方法——onCreate(),onStart(),onResume().
2.Activity失去焦点:
就是在用户不能对该Activity操作的时候,我们理解为失去了焦点。
比如在Activity获得焦点的情况下进入第二个Activity,当前的Activity将失去焦点。
在这一阶段会依次调用onPause(),onStop()
3.Activity重新获得焦点:
onRestart(),onStart(),onResume()
4.关闭Activity:
onPause(),onStop(),onDestroy
在执行这4个阶段的过程中,可以改变系统执行轨迹的生命周期方法是onPause()和onStop().如果执行onPause()方法过程中,Activity重新获得了焦点,则不会执行onStop().而是这样执行:
onPause(),onResume(),onPause.
下面是两个例子
第一个Activity:
packagecom.sunny.android_cycle;
importandroid.app.Activity;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
importandroid.widget.TextView;
publicclassAndroid_cycleActivityextendsActivity{
privateButtonbtn;
privateTextViewtv01;
/**Calledwhentheactivityisfirstcreated.*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv01=(TextView)findViewById(R.id.tv01);
tv01.setText(this+"
"
);
//打印activity的ID
System.out.println("
firstoncreate"
btn=(Button)findViewById(R.id.btn1);
btn.setOnClickListener(newClickEvent());
}
classClickEventimplementsOnClickListener{
publicvoidonClick(Viewv){
Intentintent=newIntent();
intent.setClass(Android_cycleActivity.this,secondActivity.class);
Android_cycleActivity.this.startActivity(intent);
//finish();
}
protectedvoidonStart(){
//TODOAuto-generatedmethodstub
System.out.println("
firstonStart"
super.onStart();
protectedvoidonRestart(){
firstonRestart"
super.onRestart();
protectedvoidonResume(){
firstonResume"
super.onResume();
protectedvoidonPause(){
firstonPause"
super.onPause();
protectedvoidonStop(){
firstonStop"
super.onStop();
protectedvoidonDestroy(){
firstonDestroy"
super.onDestroy();
}
第二个Activity:
/**
*@authorsunny
*
*/
publicclasssecondActivityextendsActivity{
privateButtonbtn2;
/*(non-Javadoc)
*@seeandroid.app.Activity#onCreate(android.os.Bundle)
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
secondonCreate"
btn2=(Button)findViewById(R.id.btn02);
btn2.setOnClickListener(newClickEvent());
intent.setClass(secondActivity.this,Android_cycleActivity.class);
secondActivity.this.startActivity(intent);
secondonStart"
secondonRestart"
secondonResume"
secondonPause"
secondonStop"
secondonDestroy"
加载第一个Activity,后台的打印:
这个不用多说,我们可以看到这个Activity,并且得到了焦点。
此时在界面上可以看到Activity的ID值:
Android_cycleActivity@44ee2f00
下来点击第一个Activity的按钮,跳转到第二个Activity:
后台输出:
第一个Activity被暂停,另一个Activity执行了第一个阶段。
第一个Activity失去了焦点,不能再被看见,这时调用了第一个activity的onStop().
然后我们按手机上的回退键,回到第一个界面
可以发现,界面上的Activity的ID值是不变的!
!
后台的输出:
这时第二个activity暂停,开始失去焦点,而第一个activity开始重新获得焦点,开始onRestart,onStart,onResume,第二个activity不再可见,调用onStop---onDestroy。
下面我们在考虑,这次从第二个activity跳转回来,我们点击第二个界面的跳回键。
此时,注意,界面上的activity的值已经改变了!
第一个界面并没有和刚才那样从onStoponRestartonStartonResume
而是执行了onStop—>
onCreateonStartonResume.
这样我们很容易理解了,为什么第一个Activity的ID值变化了。
下面再看另一个例子,这个例子和第一个雷同,不同的是第二个Activity的形式是对话框的形式,就是并没有完全挡住第一个Activity,那么,我们可以猜测第一个Activity的onStop方法调用时机和前面一个例子可能有点不同。
第一个Activity的java代码
publicclassFirstActivityextendsActivity{
privateButtonmyButton;
FirstActivity--->
onCreate"
setContentView(R.layout.main);
tv01=(TextView)findViewById(R.id.textview01);
tv01.setText(this+"
myButton=(Button)findViewById(R.id.myButton);
myButton.setOnClickListener(newButtonListener());
FirstAcvity--->
onDestory"
onPause"
onRestart"
onResume"
onStart"
onStop"
classButtonListenerimplementsOnClickListener{
//TODOAuto-generatedmethodstub
intent.setClass(FirstActivity.this,SecondActivity.class);
FirstActivity.this.startActivity(intent);
第二个Activity的java代码
publicclassSecondActivityextendsActivity{
privateButtonsecondButton;
protectedvoidonCreate(BundlesavedInstanceState){
SecondActivity--->
onCreate"
secondButton=(Button)findViewById(R.id.secondButton);
secondButton.setOnClickListener(newButtonListener());
classButtonListenerimplementsOnClickListener{
intent.setClass(SecondActivity.this,FirstActivity.class);
SecondActivity.this.startActivity(intent);
第二个Activity是对话框的风格的,这个只要在AndroidManifest.xml中对第二个Activity进行如下注册
<
activityandroid:
name="
.SecondActivity"
android:
label="
SecondActivity"
theme="
@android:
style/Theme.Dialog"
点击按钮:
我们来看后台的输出:
这时,第一个Activity并没有完全不可见,只是失去了焦点,所以并没有调用第一个Activity的onStop().
下一步,我们点击回退键
可以看到Activity的ID是不改变的,后台输出
第二个Activity暂停了,这时第一个Activity重新获得了焦点,走的是焦点生命周期:
onPause—>
onResume—>
onPause,所以,我们得到了FirstActivity--onResume,这样的输出。
再考虑下,如果我们不是点击手机上回退键回到第一个Activity,而是点击跳回按钮返回第一个activity,我们可以大胆的说,ID值肯定不同了,第一个activity应该是onpauseonStop—>
onCreate—>
onStart—>
onResume
所以我们可以了解到onPause(),当第一个Activity使用Intent跳到第二个Activity,将先调用第一个Activity的onPause(),然后是第二个Activity的onCreate,onStart,onResume.如果第二个Activity挡住了第一个Activity,那么将下面调用的是第一个Activity的onStop();
这样以后第一