打开Activity
onCreate -> onStart -> onResume
被覆盖
应用场景:
1、弹出Dialog,或者是Dialog形式的activity
2、手机锁屏
onPause
覆盖消失
onResume
跳转到其他Activity/home键程序退到后台
onPause -> onStop
回到活跃状态:
onRestart -> onStart -> onResume
被系统关闭
onPause -> onStop -> onDestroy
生命周期变化中的数据保存
一、onSaveInstanceState
1、跳转到其他Activity/按home键程序退到后台
2、改变屏幕方向
3、当Activity被覆盖或退到后台,系统因资源不足将它关闭
在onPause之前被调用
onSaveInstanceState -> onPause -> onStop ( -> onDestroy)
二、onRestoreInstanceState
1、Activity被覆盖或退到后台,系统因资源不足将它关闭,重新被打开的时候
2、窗口变化,Activity被重新加载的时候
在onStart之后被调用
onCreate -> onStart -> onRestoreInstanceState -> onResume
旋转屏幕
一、Activity被重新创建
不固定屏幕方向,不设置任何属性
onCreate -> onStart -> onSaveInstanceState -> onResume
二、不重新创建
设置android:configChanges="orientation",不固定屏幕方向(若设定了android:screenOrientation值,则configChanges="orientation"不生效)
只调用onConfigurationChanged方法
另:android:configChanges属性可以有很多值的改变被影响:详细
有关窗口焦点变化
一、当Activity被创建的时候
onCreate -> onStart -> onResume -> onWindowFocusChanged
二、当Activity被覆盖、锁屏
onPause -> onWindowFocusChanged
三、当Activity跳转到其他Activity,按home键程序退到后台
onPause -> onWindowFocusChanged -> onStop
注,可能的应用场景:
程序启动时想要获取视特定视图组件的尺寸大小,在onCreate中可能无法取到,因为窗口Window对象还没创建完成,这个时候我们就需要在onWindowFocusChanged里获取;如果大家已经看过我写的Android动画之Frame Animation这篇文章就会知道,当时试图在onCreate里加载frame动画失败的原因就是因为窗口Window对象没有初始化完成,所以最后我将加载动画的代码放到了onWindowFocusChanged中,问题迎刃而解。
网友评论