Activity 生命周期汇总

打开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中,问题迎刃而解。

你可能感兴趣的:(Activity 生命周期汇总)