欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

android生命周期深入分析(一)

程序员文章站 2023-12-05 17:16:34
android 系统在activity 生命周期中加入一些钩子,我们可以在这些系统预留的钩子中做一些事情。 例举了 7 个常用的钩子: protected void onc...
android 系统在activity 生命周期中加入一些钩子,我们可以在这些系统预留的钩子中做一些事情。
例举了 7 个常用的钩子:
protected void oncreate(bundle savedinstancestate)
protected void onstart()
protected void onresume()
protected void onpause()
protected void onstop()
protected void onrestart()
protected void ondestroy()

简要说明
oncreate(bundle savedinstancestate):创建activity时调用。设置在该方法中http://www.myexception.cn/,还以bundle中可以提出用于创建该 activity 所需的信息。
onstart():activity变为在屏幕上对用户可见时,即获得焦点时,会调用。
onresume():activity开始与用户交互时调用(无论是启动还是重新启动一个活动,该方法总是被调用的)。
onpause():activity被暂停或收回cpu和其他资源时调用,该方法用于保存活动状态的。。
onstop():activity被停止并转为不可见阶段及后续的生命周期事件时,即失去焦点时调用。
onrestart():重新启动activity时调用。该活动仍在栈中,java.io.unsupportedencodingexception而不是启动新的活动。
ondestroy():activity被完全从系统内存中移除时调用,该方法被调用可能是因为有人直接调用 finish()方法 或者系统决定停止该活动以释放资源。

横竖屏切换
1 切换到横屏
onsaveinstancestate
onpause
onstop
ondestroy
oncreate
onstart
onrestoreinstancestate
onresume

2 切换到竖屏,销毁了两次
onsaveinstancestate
onpause
onstop
ondestroyoncreate
onstart
onrestoreinstancestate
onresume
onsaveinstancestate
onpause
onstop
ondestroy
oncreate
onstart
onrestoreinstancestate
onresume

3 修改androidmanifest.xml,把该activity添加 android:configchanges="orientation",切横屏,只销毁一次
onsaveinstancestate
onpause
onstop
ondestroy
oncreate
onstart
onrestoreinstancestate
onresume

4 再切回竖屏,发现不会再打印相同信息,但多打印了一行onconfigchanged
onsaveinstancestate
onpause
onstop
ondestroy
oncreate
onstart
onrestoreinstancestate
onresume
onconfigurationchanged

5 更改 android:configchanges="orientation" 改成 android:configchanges="orientation|keyboardhidden",切横屏,就只打印onconfigchanged
onconfigurationchanged

6 切回竖屏
onconfigurationchanged
onconfigurationchanged

总结
1、不设置activity的android:configchanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
2、设置activity的android:configchanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
3、设置activity的android:configchanges="orientation|keyboardhidden"时,切屏不会重新调用各个生命周期,只会执行onconfigurationchanged方法