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