android基本知识汇总结之android生命周期
1.Activity的生命周期
答:onCreate: 在这里创建界面,做一些数据的初始化工作
onStart: 到这一步变成用户可见不可交互的
onResume:变成和用户可交互 的,(在activity 栈系统通过栈的方式管理这些个Activity的最上面,运行完弹出栈,则回到上一个Activity)
onPause: 到这一步是可见但不可交互的,系统会停止动画 等消耗CPU 的事情从上文的描述已经知道,应该在这里保存你的一些数据,因为这个时候你的程序的优先级降低,有可能被系统收回。在这里保存的数据,应该在
onstop: 变得不可见,被下一个activity覆盖了
onDestroy: 这是activity被干掉前最后一个被调用方法了,可能是外面类调用finish方法或者是系统为了节省空间将它暂时性的干掉。
2.横竖屏切换时候的activity的生命周期
答:a. 新建一个activity,并把各个生命周期打印出
(1). 运行activity,得到如下信息:
onCreate()
onStart()
onResume()
(2). 按ctrl+F12切换成横屏时
onSaveInstanceState()
onPause()
onStop()
onDestroy()
onCreate()à
onStart()à
onRestoreInstanceState()à
onResume()à
(3) .再按ctrl+f12切换成竖屏时,发现打印了两次相同的Log
onSaveInstanceState()
onPause()
onStop()
onDestroy()
onCreate()
onStart()
onRestoreInstanceState()
onResume()
onSaveInstanceState()
onPause()
onStop()
onDestroy()
onCreate()
onStart()
onRestoreInstanceState()
onResume()
(5). 修改AndroidManifest.xml,把该Activity添加android:configChanges=“orientation”,执行步骤2
onSaveInstanceState()
onPause()
onStop()
onDestroy()
onCreate()
onStart()
onRestoreInstanceState()
onResume()
6) 修改AndroidManifest.xml,把该Activity添加android:configChanges=“orientation”,执行步骤3,发现不会再打印相同信息,但多打印了一行 onConfigurationChanged
onSaveInstanceState()
onPause()
onStop()
onDestroy()
onCreate()
onStart()
onRestoreInstanceState()
onResume()
onConfigurationChanged()
7) 把步骤5的android:configChanges=“orientation”改成android:configChanges=“orientation|keyboradHidden”,执行步骤2,就只打印
onConfigurationChanged()
8) 把步骤5的android:configChanges=“orientation”改成android:configChanges=“orientation|keyboradHidden”,执行步骤3,就只打印
onConfigurationChanged()
onConfigurationChanged()
总结:
1).不设置activity的android:configChanges时,切横屏时会执行一次,切竖屏时会执行两次。
2).设置activity的android:configChanges=“orientation”时, 切屏会重新调用各个生命周期,切横屏、竖屏时都只会执行一次,但是竖屏最后多打印 一条onConfigurationChanged()
3).设置activity的android:configChanges=“orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged(), 横屏一次,竖屏两次
总结下整个activity的生命周期:
1).当前activity产生事件弹出Toast和AlertDialog的时候Activity的生命周期不会有改变
2)Activity运行时按下HOME键(跟被完全覆盖一样的)
onSavaInstanceState
onPauseà
onStop
onRestart
onStart
onResume
3) 未被完全覆盖,只是失去焦点:
onPause
onResume
3.说明onSaveInstanceState() 和 onRestoreInstanceState()在什么时候被调用
答:Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate()、onPause()等生命周期方法,它们并不一定会被触发。当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState()才会被调用。但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用。因为在这种情况下,用户的行为决定了不需要保存Activity的状态。通常onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。
另外,当屏幕的方向发生了改变, Activity会被摧毁并且被重新创建,如果你想在Activity被摧毁前缓存一些数据,并且在Activity被重新创建后恢复缓存的数据。可以重写Activity的 onSaveInstanceState() 和 onRestoreInstanceState()方法。