Activity生命周期
来源:互联网 发布:数据库修改语句的in 编辑:程序博客网 时间:2024/06/04 21:05
有关Activity生命周期的讲解有很多,在此总结一下以加深印象。
网上使用比较多的一张关于Activity生命周期的一张图:
Activity的运行状态:
- 运行状态:当前Activity位于前台,用户可见,可获得焦点。
- 暂停状态:其他Activity位于前台,该Activity依然可见,但不能获取焦点。
- 停止状态:该Activity不可见,失去焦点。
- 销毁状态:该Activity结束,或Activity所在的进程被销毁。
不同情况下生命周期方法的执行过程:
单横线是Activity1的方法,双横线是Activity2的方法。
1. 当我们启动一个Activity1时,会首先执行onCreate方法,然后onStart()–>onResume(),此时的Activity1就处于运行状态。
2. Activity被部分覆盖时:
例如当我们从Activity1跳转至对话框风格的Activity2时的执行顺序
Activity1的onPause()方法–>
Activity2的onCreate()–>onStart()–>onResume()
此时的Activity1处于暂停状态,不能获得焦点,但依然可见。
此时回到Activity1则会执行:
3.Activity被完全覆盖时:
从Activity1跳转至正常状态的Activity2(非对话框风格)时,会先执行Activity1的onPause()方法,然后执行Activity2的onCreate()–>onStart()–>onResume(),此时Activity2处于运行状态,Activity1被Activity2覆盖,这时会执行Activity1的onStop()方法。
此时若回到Activity1会执行:
4.锁定屏幕或者按HOME键回到主界面时:
此时如果解锁或回到当前Activity,则会执行:
5.用户主动退出当前Activity,或Activity由于系统内存不足被杀死时:
另外几个常用的方法:
1.onWindowFocusChanged:
窗口获得或失去焦点时调用
获得焦点时在onResume()方法之后调用:
失去焦点时在onPause()方法之后调用:
onSaveInstanceState:
系统会自动调用onSaveInstanceState来保存Activity的一些数据,但当除它默认要保存的数据外,我们还要保存一些其他数据的时候, 我们就需要覆盖onSaveInstanceState()方法来保存Activity的附件信息。例如在播放视频过程中,横竖屏切换要保持当前播放时间进度,在默认情况下播放时间是不被自动保存的。
onSaveInstanceState()方法在系统销毁当前Activity时调用,也是在onPause()方法之后调用的,如上图。
2.onRestoreInstanceState
1.系统杀死不在前台的Activity后,用户再回到此Activity时调用
2.用户改变屏幕方向时调用。
当我们旋转屏幕时,生命周期的执行顺序如下:
屏幕旋转其实就是Activity销毁重建的过程。
3.onConfigurationChanged
屏幕方向改变时销毁重建Activity的过程会消耗一定的资源,我们可以为一个Activity指定一个特定的方向,指定之后即使转动屏幕方向,显示方向也不会跟着改变:
1.指定为竖屏:
在AndroidManifest.xml中指定Activity的android:screenOrientation=”portrait”属性。
或者在onCreate方法中指定:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
2.指定为横屏:
在AndroidManifest.xml中指定Activity的android:screenOrientation=”landscape”属性。
或者在onCreate方法中指定:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
但是如果我们想让我们的Activity跟随屏幕的旋转而旋转,又不希望不断的执行销毁重建的过程,则可采用下面的方法:
在AndroidManifest.xml中为Activity设置android:configChanges=”orientation”
这个属性被设置后,当Activity方向改变时并不会执行销毁重建的过程,而是会调用onConfigurationChanged()方法。
但是,自从Android 3.2(API 13),在设置Activity的android:configChanges=”orientation”后,还是一样会重新调用各个生命周期的。因为screen size也开始跟着设备的横竖切换而改变。所以,在AndroidManifest.xml里设置的MiniSdkVersion和 TargetSdkVersion属性大于等于13的情况下,如果你想阻止程序在运行时重新加载Activity,除了设置”orientation”,你还必须设置”ScreenSize”。
解决方法:
AndroidManifest.xml中设置android:configChanges=”orientation|screenSize“
本文参考:http://blog.csdn.net/liuhe688/article/details/6733407
- Activity 生命周期
- Activity生命周期
- Activity 生命周期
- Activity 生命周期
- Activity生命周期
- Activity生命周期
- Activity生命周期
- Activity生命周期
- Activity生命周期
- activity生命周期
- Activity 生命周期
- Activity生命周期
- Activity 生命周期
- activity生命周期
- Activity 生命周期
- Activity生命周期
- Activity生命周期
- Activity生命周期
- android Notification自定义view(view不更新的问题)
- 最大公约数和最小公倍数
- angular input file ngchange方法不生效
- easyui让隐藏的组件不进行验证
- angular post(save)传值失败问题
- Activity生命周期
- 常用网址
- 几个常见的MySQL性能测试工具(转)
- Maven项目使用tomcat插件启动后报内存溢出
- 网上整理的
- Redhat 7使用CentOS 7的Yum网络源
- 安卓微信客户端背景图无法100%适配所有 机型的问题
- [OpenStack-Nova]虚拟机动态快照配置
- 2: Creating A Script( Challenge: Working with the Command Line )