activity生命周期
来源:互联网 发布:mac user文件夹在哪 编辑:程序博客网 时间:2024/06/09 01:44
activity的生命周期
关于activity的生命周期,已经有很多有很多详细的说明了,在官网上的一张经典的图片:
执行顺序: onCreate–>onStart–>onResume–>onPause –> onStop –>onDestroy
onPostCreate方法是指onCreate方法彻底执行完毕的回调,onPostResume类似,这两个方法官方说法是一般不会重写,
现在知道的做法也就只有在使用ActionBarDrawerToggle的使用在onPostCreate需要在屏幕旋转时候等同步下状态,
注:ActionBarDrawerToggle的作用:
- 改变android.R.id.home返回图标。
- Drawer拉出、隐藏,带有android.R.id.home动画效果。
- 监听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的生命周期里,还存在着很多不同的调用方法,需要自己去尝试,了解这些基础的方法及调用的时机,会给我们的代码带来更多的简洁性。
- Activity 生命周期
- Activity生命周期
- Activity 生命周期
- Activity 生命周期
- Activity生命周期
- Activity生命周期
- Activity生命周期
- Activity生命周期
- Activity生命周期
- activity生命周期
- Activity 生命周期
- Activity生命周期
- Activity 生命周期
- activity生命周期
- Activity 生命周期
- Activity生命周期
- Activity生命周期
- Activity生命周期
- 完美解决 未能打开编辑器:Unmatched braces in the pattern.
- pysftp Exception: Expecting packet from (31,), got 94
- [ 正则 ]正则表达式进阶!
- 阴影映射(Shadow Map)的研究(一)
- 直接链接字段的添加以及substring内存泄露的考虑
- activity生命周期
- 基于java反射知识的类查看器
- Hibernate缓存机制
- Decode ways--LeetCode
- 让Dev C++支持C++11
- JSP知识点
- 用c语言实现 编写一个函数reverse_string(char * string)
- HR问的问题
- 正则表达式知识整理