Android 四大组件学习之Activity五

2022-05-08 16:02:47 浏览数 (3)

上几次课学习了,如何创建一个Activity, 如何去用一个Activity去启动另外一个Activity, 以及传值,得到返回值等。

今天学习Activity的生命周期。

上图是Google官网关于Activity提供的一张关于Activity的生命周期的图片,这张图片很清晰的说明了Activity的生命周期。

大概Activity有以下几个状态:

1。运行态(Activity处在屏幕最前面,并且前面没有别的Activity遮盖)

2。暂停态(Activity前面有其他的Activity的遮盖,但是没有完全的遮盖)

3。停止态(Activity前面有其他的Activity的遮盖,并且完全的遮盖)

4。消亡态(Activity被彻底的销毁掉了)

从而就会出现几种状态之间的转化(如下图所示)

如上图所示,共有6中状态之间的转化。当然了还有停止到消亡的2中方式,我在里就不详细说明了。

再现看现象之前先列出我的代码:

代码语言:javascript复制
public class ThirdActivity extends Activity {

	private Button button;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_third);
		Log.i("ThirdActivity", "onCreate");
		button = (Button)findViewById(R.id.button1);
		
		button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intent = new Intent(ThirdActivity.this, FourActivity.class);
				startActivity(intent);
			}
		});
	}

	@Override
	protected void onStart() {
		// TODO Auto-generated method stub
		super.onStart();
		Log.i("ThirdActivity", "onStart");
	}

	@Override
	protected void onRestart() {
		// TODO Auto-generated method stub
		super.onRestart();
		Log.i("ThirdActivity", "onRestart");
	}

	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		Log.i("ThirdActivity", "onResume");
	}

	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		Log.i("ThirdActivity", "onPause");
	}

	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
		Log.i("ThirdActivity", "onStop");
	}

	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		Log.i("ThirdActivity", "onDestroy");
	}

}

代码中我用的是打印来看现象:

1: 运行态----->  暂停态

当我启动主Activity后的打印如下:

当通过button按钮去启动一个Activity,但没有完全遮盖主Activity。

可以看出主Activity并没有完全遮盖,所以现在主Activity处于暂停态。

2: 暂停态---->运行态

当我按下back按键后,弹出的Activity消失, 主Activity又回到了运行态:

3:暂停态----->停止态

当我在暂停态,之间按Home按键返回,这时候主Activity已经完全看不见了,此时主Activity是出于停止态

4:停止态------>暂停态

因为之前我们从暂停态到停止态,主Activity上面还有一个弹出的Activity。所以我们返回去的时候还是处于此种状态。

当前的模拟器界面为:

从打印看得,我们的主Activity现在是start状态,还没有运行态。 当我们按Back按键返回后:

这时候主Activity才正式开始运行。 当再次按下Button后就会变为暂停态

5:运行到----->停止

运行到停止是先暂停然后再停止

6:停止----->运行

先是Restart, 然后是Start,然后是Resume。

当然了: 如果我们在运行态按back按键就会出现先暂停, 停止, 消亡

还有,再次按进来就会重新create,然后start, 然后resume。 这些留给大家练习

补充: 刚才从暂停态变为停止态,然后从停止态回来时主Activity是start状态,这个你有没有想过是为啥?

我对用Button唤醒的activity也加了打印。 我们一起分析一下:

1:主Activity运行到暂停

可以看到主Activity(ThirdActivity)先暂停,然后弹出的(FourActivity)才create, start, resume

2:暂停到运行(大家可以先猜猜是FourActivity先暂停,停止,消亡后,ThirdActivity才Resume还是FourActivity先暂停,然后Third接着运行,然后Four才销毁)

我是这样理解的: 当FourActivity返回时,说我先暂停,你接着运行。等你运行起来后,我会自己退出的。如果我停止,然后消亡的时间段稍微有点长,可能就会耽搁您的表演了,所以我先暂停表演,您接着继续。

3:暂停到停止

Four是先暂停自己,然后让出资源让Third先完成,完成后自己这个干自己的事。

4:停止到暂停

当回来时,ThirdActivity先Resstart,然后start。接着才是FourActivity启动运行。

好了,Activity的生命周期就分析到这里。大家感兴趣的话,可以看看别的书籍。饿死我了。

1 人点赞