安卓activity生存周期的onCreate、onRestoreInstanceState、onRestart、onStart、onResume、onPause、onStop、onDestroy

本文详细介绍了Android中Activity的生命周期,包括onCreate、onStart、onResume等关键方法的调用时机,并通过具体示例展示了不同场景下Activity状态的变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

全栈工程师开发手册 (作者:栾鹏)
安卓教程全解

每一个Activity的状态是由它在Activity栈中所处的位置所决定的, Activity其是当前所有正在运行的Activity的后进先出的集合。 当一个新的Activity启动时 , 它就变为Activity 状态, 并被移动到栈顶 。 如果用户使用Back(返回)按钮返回到了刚才的Activity, 或者前台Activity被关闭了, 那么栈中的下一个Activity 就会移动到栈顶 ,变为活动状态。
这里写图片描述

这里写图片描述

这里进行以下操作演示窗口的生命周期:

1、启动activity1,点击activity1中的控件进入activity2,

2、点击手机home键,切换到手机主界面。

3、进入已经打开的activity2

4、点击返回键,关闭activity2,返回到activity1。

通过以上几步,了解窗口的onCreate、onRestoreInstanceState、onRestart、onStart、onResume、onSaveInstanceState、onPause、onStop、onDestroy各阶段的执行触发点。

activity2的窗口代码为

public class Activity2 extends Activity{  

	//完整生存期开始时调用
    @Override 
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);   //调用基类方法
        setContentView(R.layout.activity2);  //setContentView可以通过扩展布局资源来对用户界面进行布局
        Log.v("生命周期", "完整生存期开始");
    }
  
 	//在onCreate方法完成后调用,用户恢复UI状态
    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState) {
      super.onRestoreInstanceState(savedInstanceState);
      //从savedInstanceState恢复UI状态
      //这个bundle也被传递给onCreate.
      //自activity上次可见之后,只有当系统终止了该activity时,才会被调用
      Log.v("生命周期", "恢复UI状态");
    }

    //在随后的activity进程的可见生存期之前调用
    @Override
    public void onRestart(){
      super.onRestart();
      // 加装载改变,知道activity在此进程中已经可见
      Log.v("生命周期", "重启");
    }

    //在可见生存期(可见不一定聚焦)的开始时调用
    @Override
    public void onStart(){
      super.onStart();
      //既然activity可见,就应用任何要求的UI Change
      Log.v("生命周期", "启动");
    }

    //在activity状态生存期(前台聚焦期)开始时调用
    @Override
    public void onResume(){
      super.onResume();
      //恢复activity需要,但是当它处于不活动状态时被挂起的暂停的UI更新、线程或进程
      //在activity状态生命周期结束的时候调用,用来保存UI状态的改变
      Log.v("生命周期", "恢复");
    }

    // 把UI状态改变保存到savedInstanceState
    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
      //如果进程在运行时被终止或被重启,那么这个Bundle会保存UI状态,并将被传递给onCreate和onRestoreInstanceState用来恢复UI
    	//onPause前会调用此函数
      super.onSaveInstanceState(savedInstanceState);
      Log.v("生命周期", "保存UI状态");
    }

    // 在activity状态生存期(前台聚焦期)结束时调用
    @Override
    public void onPause(){
      // 挂起不需要更新的UI更新、线程或者cpu密集的进程
      //当activity不是前台的活动状态的activity时
      super.onPause();
      Log.v("生命周期", "暂停");
    }

    //在可见生存期(可见不一定聚焦)结束时调用
    @Override
    public void onStop(){
      // 挂起不需要的UI更新、线程或处理(传感器监听器、GPS,定时器、service)
    	//当activity不可见时,保存所有的编辑或者状态改变,因为在调用这个方法后,进程可能会被禁止
      super.onStop();
      Log.v("生命周期", "停止");
    }

    //在完整生存期结束时调用
    @Override
    public void onDestroy(){
      // 清理所有的资源,包括结束线程、关闭数据库连接等
      super.onDestroy();
      Log.v("生命周期", "销毁");
    }
    
}

activity1的窗口函数为

public class Activity1 extends Activity{  

    @Override  
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);   
        setContentView(R.layout.activity1); 
        //点击控件,切换窗口
        TextView tv = (TextView)findViewById(R.id.activity1_text1);
        tv.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				tosub();
			}
		});
    }

	//切换到窗口2
    public void tosub() {
    	Intent myintent = new Intent();
    	myintent.setClass(Activity1.this,Activity2.class);
    	startActivity(myintent);  //启动新页面
	}
}

运行打印输出如下:

这里写图片描述

1、从activity1进入activity2,依次启动了onCreate、onStart、onResume函数

2、点击键盘后面键,使app进入后台,依次启动了onPause、onSaveInstanceState、onStop

3、从手机home界面重新进入已打卡的app,依次已启动了onRestart、onStart、onResume

在activity2窗口中点击物理返回键,关闭activity2,依次启动了onPause、onStop、onDestroy

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

腾讯AI架构师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值