美文网首页
Android基础<第一篇>:Activity的生命周期

Android基础<第一篇>:Activity的生命周期

作者: NoBugException | 来源:发表于2021-12-21 18:52 被阅读0次

    Activity是Android四大组件之一,其中Activity的生命周期是面试必问题,一般只要回答:
    onCreate --> onStart --> onResume --> onPause --> onStop --> onDestory即可。下面开始详细说一下这些生命周期。

    在内存中,存在着一个Activity栈,当Activity被创建的时候,
    Activity栈中就会添加一个Activity,反之,如果Activity被销毁,就会将Activity从栈中删除。
    
    onCreate:只有在Activity被创建的时候执行;
    onRestart:Activity再次被唤起的时候执行;
    onStart  :Activity启动的时候执行;
    onResume:Activity被唤起到前台,变成可见状态的时候执行;
    onPause:Activity被遮挡的时候执行(被另一个Activity、Dialog遮挡)
    onStop:Activity从前台切换到后台的时候执行;
    onSaveInstanceState:Activity从前台切换到后台时,保存Activity状态;
    onDestory:Activity被销毁的时候执行;
    

    当启动一个Activit时,生命周期是:

    onCreate  -->  onStart  -->  onResume
    

    当按Home键,将Activity从前台切换到后台时的生命周期是:

    onPause  -->  onStop -->  onSaveInstanceState
    

    (3)唤起后台中的Activity

    A的生命周期:onRestart  -->  onStart  -->  onResume
    

    (4)按返回键

    A的生命周期:onPause  -->  onStop  -->  onDestroy
    

    (5)横竖屏切换(重点)

    正常情况下,屏幕旋转的时候Activity生命周期会被执行:
    
    onPause  -->  onStop  --> onSaveInstanceState  -->  onDestroy  -->  onStart  -->  onRestoreInstanceState  -->  onResume
    
    但是,如果在android:configChanges=""中配置"orientation|screenSize"属性之后,
    屏幕旋转时,Activity不会走生命周期,这种情况下只会执行如下方法:
    
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
    }
    
    newConfig可以捕获到屏幕的旋转状态。
    configChanges的配置说明如下:
    * “mcc“ 移动国家号码,由三位数字组成,每个国家都有自己独立的MCC,可以识别手机用户所属国家。
    * “mnc“ 移动网号,在一个国家或者地区中,用于区分手机用户的服务商。
    * “locale“ 所在地区发生变化。
    * “touchscreen“ 触摸屏已经改变。(这不应该常发生。)
    * “keyboard“ 键盘模式发生变化,例如:用户接入外部键盘输入。
    * “keyboardHidden“ 用户打开手机硬件键盘
    * “navigation“ 导航型发生了变化。(这不应该常发生。)
    * “orientation“ 设备旋转,横向显示和竖向显示模式切换。
    * “fontScale“ 全局字体大小缩放发生改变
    

    (6)扩展题

    当Dialog被弹起时旋转屏幕,怎样让Dialog不消失?

    方法一:
    在Activity注册表中添加android:configChanges="orientation|screenSize"属性,使Activity在屏幕旋转时不走生命周期;
    
    方法二:
    如果没有配置"orientation|screenSize"属性,那么还可以通过onSaveInstanceState和onRestoreInstanceState实现,
    使用onSaveInstanceState方法保存Dialog的状态(存入Bundle中),在onRestoreInstanceState中的Bundle中拿到Dialog的状态,
    根据Dialog状态再重新显示对话框;
    

    [本章完...]

    相关文章

      网友评论

          本文标题:Android基础<第一篇>:Activity的生命周期

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