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

来源:互联网 发布:linux下svn 钩子函数 编辑:程序博客网 时间:2024/05/01 13:18

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

安卓教程全解

每一个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

阅读全文
0 0