前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android 四大组件学习之Activity五

Android 四大组件学习之Activity五

作者头像
DragonKingZhu
发布2022-05-08 16:02:47
2540
发布2022-05-08 16:02:47
举报

上几次课学习了,如何创建一个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的生命周期就分析到这里。大家感兴趣的话,可以看看别的书籍。饿死我了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-07-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档