Activity的生命周期
来源:互联网 发布:如何评价张国荣 知乎 编辑:程序博客网 时间:2024/06/05 03:10
最近重新梳理了activity的生命周期,结合自己的实践和网上资料总结如下:
1. 基本概念:
生命周期:
状态:
状态切换:
2. 几种生命周期
完整的生命周期 entire lifetime create – destroy
可见生命周期 visible lifetime start –stop
前台生命周期 foreground lifetime resume – pause
3. 每个生命周期所做的事情
l onCreate() setContentView()来实例化组件,引用已实例组件,为组件设置监听器处理用户交互,访问外部模型数据
l onStart() 为用户可见
l onResume() 可以响应用户交互
l onPause() 失去焦点,将要离开时调用
l onStop() activity不再处于栈顶
l onDestroy() 资源销毁
4. 操作对生命周期的影响
l 新建activity onCreate -onState -onResume
l 后退键: onPause(),onStop(), onDestroy(),这是Android 设备节约有限资源的方法
l 返回home: onPause().onStop()
l 返回home 后再进入 onStart–onResume
l 长按home键,actity状态没改变
l -创建新的activity onPause –onStop –onDestroy- onCreate -onStart-onResume
l 横竖屏切换-创建新的activity onPause –onStop – onDestroy- onCreate -onStart-onResume
l 横竖屏切换-设置
l 1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,
切横屏时会执行一次,切竖屏时会执行一次
2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调
用各个生命周期,切横、竖屏时只会执行一次
3、设置Activity的android:configChanges="orientation|keyboardHidden"时,
切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法 ;注意,自从Android 3.2(API 13),还是会调用各个生命周期。
4、设置为:AndroidManifest.xml中设置android:configChanges="orientation|screenSize“,屏幕切换会调用onConfigurationChanged()。记住,前面一定要加orientation,如果没有orientation是不可以的。
l 当指定的属性发生变化时,不会去重新启动Activity,而是通知程序去调用 onConfigurationChanged()函数 例如:在进行横竖屏的切换时,会重新启动Activity,而定义了这个属性,就不会重新启动Activity了,而是去调用 onConfigurationChanged()函数 ,可以设置多个属性,中间用|隔开
l 设备旋转会改变设备配置(设备配置是用来描述当前状态的一系列特征,包括:屏幕的方向,屏幕的密度,屏幕的尺寸,键盘类型,底座模式以及语言)。
5. 其他注意事项:
l onStop() 后的,即停止的activity能存在多久,谁也无法保证。如果系统需要回收内存,他将首先销毁那些停止的activity。
l 如果一个activity 有一个线程在后台运行从网络下载数据,那么在onDeosroy 中也会被销毁
l onsaveInstanceState (Bundle outState),通常在onPause()onStop() onDestroy () 之前由系统调用,将activity 所有自身状态数据保存在bundle 中,然后再create()中取出数据
Public void onCreate(BundlesavedInstanceState){
}
我们在Bundle中存储和恢复发数据类型只能是基本数据类型(primitive type),以及serializable接口的对象。创建自己的定制类时,如需在onsavedInstanceState()方法中保存类对象,记得实现serializable接口。
6. 其他方法:
onWindowFocusChanged方法:在Activity窗口获得或失去焦点时被调用,例如创建时首次呈现在用户面前;当前Activity被其他Activity覆盖;当前Activity转到其他Activity或按Home键回到主屏,自身退居后台;用户退出当前Activity。以上几种情况都会调用onWindowFocusChanged,并且当Activity被创建时是在onResume之后被调用,当Activity被覆盖或者退居后台或者当前Activity退出时,它是在onPause之后被调用。
onSaveInstanceState:(1)在Activity被覆盖或退居后台之后,系统资源不足将其杀死,此方法会被调用;(2)在用户改变屏幕方向时,此方法会被调用;(3)在当前Activity跳转到其他Activity或者按Home键回到主屏,自身退居后台时,此方法会被调用。第一种情况我们无法保证什么时候发生,系统根据资源紧张程度去调度;第二种是屏幕翻转方向时,系统先销毁当前的Activity,然后再重建一个新的,调用此方法时,我们可以保存一些临时数据;第三种情况系统调用此方法是为了保存当前窗口各个View组件的状态。onSaveInstanceState的调用顺序是在onPause之前。
onRestoreInstanceState:(1)在Activity被覆盖或退居后台之后,系统资源不足将其杀死,然后用户又回到了此Activity,此方法会被调用;(2)在用户改变屏幕方向时,重建的过程中,此方法会被调用。我们可以重写此方法,以便可以恢复一些临时数据。onRestoreInstanceState的调用顺序是在onStart之后。
- 什么是Activity?Activity的生命周期!
- Activity及Activity的生命周期
- Activity 的生命周期
- Android activity的生命周期
- Activity的生命周期
- Android:Activity的生命周期
- Activity的生命周期
- Activity的生命周期
- Activity的生命周期
- Activity的生命周期
- Activity的生命周期
- Activity的生命周期
- Android Activity的生命周期
- Android Activity的生命周期
- Activity的生命周期一
- Android Activity的生命周期
- Activity的生命周期
- Android activity的生命周期
- <%@ include file=""/>报错
- C#实现HTML转WORD及WORD转PDF的方法
- TreeView实验
- 合并两个有序链表
- C#获取客户端相关信息
- Activity的生命周期
- eclipse中设断点,却起不到作用
- android 图片缓存相关杂记
- 【月报】Android开发实习的第一个月——为什么进度这么慢
- 51nod 活动安排问题之二 (贪心+stl)
- C#实现控制摄像头的类
- NEU1579(斜率优化)
- 线程的创建和启动
- ZOJ 3905 Cake