activity生命周期

来源:互联网 发布:mac user文件夹在哪 编辑:程序博客网 时间:2024/06/09 01:44

activity的生命周期

关于activity的生命周期,已经有很多有很多详细的说明了,在官网上的一张经典的图片:

执行顺序: onCreate–>onStart–>onResume–>onPause –> onStop –>onDestroy
onPostCreate方法是指onCreate方法彻底执行完毕的回调,onPostResume类似,这两个方法官方说法是一般不会重写,
现在知道的做法也就只有在使用ActionBarDrawerToggle的使用在onPostCreate需要在屏幕旋转时候等同步下状态,
注:ActionBarDrawerToggle的作用:

  1. 改变android.R.id.home返回图标。
  2. Drawer拉出、隐藏,带有android.R.id.home动画效果。
  3. 监听Drawer拉出、隐藏

Google官方提供的一些实例就是如下做法:

@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);

// Sync the toggle state after onRestoreInstanceState has occurred.mDrawerToggle.syncState();

}

onStop与onPause的区别:

onPause在整个窗口被遮盖或者半透明时执行,而onStop在整个窗口被完全遮盖住时才会触发:触发onStop的方法之前必定会触发onPause方法。

onCreate 和onStart:

onCreate方法会在第一次创建的时候执行,紧接着便会执行onStart方法,之后页面被完全遮挡会执行onStop方法,再返回的时候一般便会执行onRestart –> onStart方法, 但是如果如果这时候App内存不够需要更多的内存的时候,App便会杀死该进程,结束掉该Activity,所以这时候再返回的时候便会重新执行onCreate –> onStart –> onResume方法。

在Android里面会用很多其他的行为,不同的行为会触动activity的方法,

当首次启动时:

onCreate –> onStart –> onResume

当按下返回键时:

onPause –> onStop –> onDestroy

当按下home键:

onPause – > onSavaInstanceState – > onDestroy

当再次打开时:

onRestart –> onStart –> onResume

当屏幕发生旋转时:(此时需要注意,会销毁当前界面或fragment的设置值)

如果你不做任何配置启动Activity会执行如下方法:

onCreate –> onStart –> onResume
之后旋转屏幕,则Activity会被销毁并重新创建,之后便会执行如下方法:onPause –> onSaveInstanceState –> onStop –> onDestroy –> onCreate –> onStart –> onRestoreInstanceState –> onResume

配置的话,在AndroidManifest配置文件里android:configChanges属性,例如:

android:configChanges="keyboardHidden|orientation|screenS ize"(sdk>13时需加上screenSize)

这个时候再旋转屏幕便不会销毁Activity ,onConfigurationChanged方法

public void onConfigurationChanged(Configuration newConfig) {
if (newConfig.orientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
// do something you want to do
}
super.onConfigurationChanged(newConfig);
}

在一个activity去打开另外一个activity时:会执行onPause–>onSaveInstanceState –> onStop,这个时候按返回键时会调用在第一个activity里面会执行:onRestart -> onStart -> onResume,当系统内存不够而把activity销毁时,讲会重新创建activity,这时候会执行: onCreate –> onStart –> onRestoreInstanceState –> onResume

onSaveInstanceState方法:

在activity里面担当保存实例的功能,也可以自行传值,(另外的传值方法,是利用intent传值和Bundle类)
当点击home键时:系统会调用onSaveInstanceState,让用户有机会保存某些非永久性的数据。
当按下电源按键时,也回调用。
当从一个activity中启动另一个activity时,也会调用。
当屏幕方向切换时,会调用。

onSaveInstanceState的调用遵循一个重要原则,即当系统“未经你许可”时销毁了你的activity,则onSaveInstanceState会被系统调用,这是系统的责任,因为它必须要提供一个机会让你保存你的数据(当然你不保存那就随便你了,你可以在里面去写其他你需要实现的东西)。

onRestoreInstanceState方法:

它是恢复实例的方法 ,它和前面的一个方法是有区别的,也不一定会成对调用,onRestoreInstanceState被调用的前提是activity A确实被系统销毁了,而如果仅仅是停留在有这种可能性的情况下,则该方法不会被调用,例如,当正在显示activityA的时候,用户按下HOME键回到主界面,然后用户紧接着又返回到activityA,这种情况下activityA一般不会因为内存的原因被系统销毁,故activity A的onRestoreInstanceState方法不会被执行.
这个方法不经常使用,很多人没有注意到onCreate里面的parameter 它的参数是:Bundle savaInstanceState,我们可以在这里面去恢复状态,例如:

public void onCreate(Bundle savedInstanceState) {
if (savedInstanceState != null){
value = savedInstanceState.getLong("param");
}
}

总结:

有很多底层的东西要多留意,在activity的生命周期里,还存在着很多不同的调用方法,需要自己去尝试,了解这些基础的方法及调用的时机,会给我们的代码带来更多的简洁性。

0 0
原创粉丝点击