Activity 生命周期汇总

作者: jnxc1888 | 来源:发表于2017-02-07 11:28 被阅读26次

    打开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 生命周期汇总

        本文链接:https://www.haomeiwen.com/subject/lkbeittx.html