您的位置:首页 > 其它

Activity的生命周期&finish方法&back键&home键&dialog对话框

2015-08-25 16:03 337 查看
最开始学Android的时候就会学Activity的生命周期函数,也知道具体怎么在跑。

但是对于一些特殊的按键,比如按home,back等键却没有详细的看看运行的周期函数。

最近工作中在解决一个bug的时候,看到在startActivity后,有调用finish方法。我理所当然地认为在调用finish方法后,后面的代码都不会执行,就像return一样。但是bug就出在了这个地方。在调用finish后,这个生命周期函数依旧会执行下去。

借着这个问题,就顺带把Activity的生命周期和生命周期函数重新看了一遍,感觉更清晰了。棒棒哒~

1.Activity的生命周期

(1)几个状态

活动状态:当前Activity位于前台,用户可见,可以获得焦点。

暂停状态:其他Activity位于前台,该Activity可见,不能获得焦点。

停止状态:该Activity不可见,不能获得焦点。

销毁状态:该Activity结束。

(2)生命周期方法

onCreate:创建Activity时被回调

onStart:启动Activity时被回调

onRestart:重新启动Activity时被回调

onResume:显示(可见)Activity时被回调。

onPause:暂停Activity时被回调

onStop:停止Activity时被回调

onDestroy:销毁Activity时被回调

(3)生命周期图



2.启动Activity

运行的生命周期函数为:

onCreate

onStart

onResume



3.按back键返回

运行的生命周期函数为:

onPause

onStop

onDestroy



4.按home键

运行的生命周期函数为:

onPause

onStop



然后再次进入

运行的生命周期函数为:
onRestart

onStart

onResume



5.finish方法

在Actyvity A 中的onResume方法中使用startActivity的方法进行开启另外一个Activity B,如:
protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		Log.d("zmq","onResume()");
		Intent intent = new Intent();
		intent.setClass(MainActivity.this, TestActivity.class);
		startActivity(intent);
		finish();
		Log.d("zmq","onResume() I hava run finish()");
	}


此时从Activity A开始运行到打开另外一个Activity
B,Activity A中生命周期函数调用顺序:

onCreate

onStart

onResume

onPause

onStop

onDestroy



之前一直以为执行到finish后,后面所有的代码都是不执行的,深深的错误~

然后按返回键退出,直接退出应用。

6.dialog对话框

在Activity A中启动一个对话框风格的Activity

Activity A运行的生命周期函数为:
onPause



点击返回键,Activity
A运行的生命周期函数为:

onResume



7.打开一个一般的Activity,不做finish动作:

代码如:
@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		if (v.getId() == R.id.enterBtn) {
			Intent intent = new Intent();
			intent.setClass(MainActivity.this, TestActivity.class);
			startActivity(intent);
		}
	}


此时从Activity A开始运行到打开另外一个Activity
B,Activity A中生命周期函数调用顺序:

onCreate

onStart

onResume

onPause

onStop



然后按返回键退出,Activity
A运行的生命周期函数为:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: