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  横竖屏切换-设置

1、不设置Activityandroid:configChanges时,切屏会重新调用各个生命周期, 
切横屏时会执行一次,切竖屏时会执行一次 
2
、设置Activityandroid:configChanges="orientation"时,切屏还是会重新调 
用各个生命周期,切横、竖屏时只会执行一次 
3
、设置Activityandroid:configChanges="orientation|keyboardHidden"时, 
切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法 ;注意,自从Android 3.2API 13),还是会调用各个生命周期。

4、设置为:AndroidManifest.xml中设置android:configChanges="orientation|screenSize“,屏幕切换会调用onConfigurationChanged()。记住,前面一定要加orientation,如果没有orientation是不可以的。

l  当指定的属性发生变化时,不会去重新启动Activity,而是通知程序去调用 onConfigurationChanged()函数 例如:在进行横竖屏的切换时,会重新启动Activity,而定义了这个属性,就不会重新启动Activity了,而是去调用 onConfigurationChanged()函数 ,可以设置多个属性,中间用|隔开 

设备旋转会改变设备配置(设备配置是用来描述当前状态的一系列特征,包括:屏幕的方向,屏幕的密度,屏幕的尺寸,键盘类型,底座模式以及语言)。

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之后。

 

0 0
原创粉丝点击