美文网首页
Activity生命周期

Activity生命周期

作者: 蒸汽飞船 | 来源:发表于2018-04-27 16:41 被阅读45次
    image.png

    生命周期是一对一对的,每一对标记了Activity的一种状态区间
    onCreate和onDestroy:存在期间
    onStart和onStop:可见期间
    onResume和onPause:前台期间

    1.调用finish()方法后,走onstopondestroy,不会调用onpause
    2.onRestart其实和onstart是绑一起的 : 这两个方法代表了activity由完全不可见重新变为可见的过程,即由onStop()后返回,便会触发该回调链。

    A->B

    A:onPause
        B:onCreate
        B:onStart
        B:onResume
    A:onStop
    

    返回:

    B:onPause
        A:onRestart
        A:onStart
        A:onResume
    B:onStop
    B:onDestroy
    

    dialog是否会对生命周期产生影响

    1. 标准的AlertDialog
    2. 全屏的AlertDialog
    3. Dialog风格的Activity

    结论:

    1. 无论是正常的dialog还是全屏的dialog,Activity状态无任何变化还在onResume()的状态,也就是说dialog并不会引起生命周期的变化。
    2. Dialog主题的Activity: 和A->B差不多,不过由于前面的Activity并没有完全不可见,所以并没有执行onStop,按后退键后,也是直接执行onResume而不经过onRestart以及onStart
    3. 一些透明主题的Activity、或者不能完全遮挡下层Activity的,效果也和2一样。

    周期:

    A:onPause
        DA:onCreate
        DA:onStart
        DA:onResume
    //没了
    

    返回:

    DA:onPause
        A:onResume
    DA:onStop
    DA:onDestroy
    

    旋转屏幕:

    旋转屏幕,蓝色表示方法基本同时调用
    想不重新创建Activity配置属性:
    android:configChanges="keyboardHidden|orientation|screenSize"
    此时屏幕旋转不会重建Activity,只会回调onConfigurationChanged界面视图也会自动调整方向,除此之外什么生命周期方法都不会走包括onSaveInstanceStateonRestoreInstanceState俩方法都不会。

    onSaveInstanceState和onRestoreInstanceState数据保存

    1. 注意保存有俩方法onSaveInstanceState(Bundle outState)onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState)要用前面那个,后面那个是API 21+添加的。

    2. onSaveInstanceState方法的调用时机是在onStop之前,与onPause没有固定的时序关系。而onRestoreInstanceState方法则是在onStart之后调用。

    3. 正常情况下的Activity销毁并不会调用这两个方法,只有当活动异常销毁并且有机会重新展示的时候才会进行调用,如1.旋转屏幕2.Activity因内存不足被销毁

    4. onRestoreInstanceStateonCreate都可以进行数据恢复工作,但是根据官方文档建议采用在onRestoreInstanceState中去恢复。

    5. onRestoreInstanceStateonRestoreInstanceState这两个方法中,系统会默认为我们进行一定的恢复工作,所有带id的view基本都会保存和恢复。

    6. 按电源键关屏时当前activity也会调用onSaveInstanceState,但再按电源键时不一定会调用onRestoreInstanceState

    7. 特例:TextView:通过setText方法动态设置文本内容,即使加了id也无法自动保存,这种情况可以通过给TextView设置freezesText属性才能自动保存,当然这条属性对EditText也同样适用。

    singleTop(栈顶复用)模式下的生命周期:

    onPause
    onNewIntent
    onResume
    

    所有的ConfigChanges

    属性值 含义
    mcc SIM卡唯一标识IMSI(国际移动用户标识码)中的国家代码,由三位数字组成,中国为:460 这里标识mcc代码发生了改变
    mnc SIM卡唯一标识IMSI(国际移动用户标识码)中的运营商代码,有两位数字组成,中国移动TD系统为00,中国联通为01,电信为03,此项标识mnc发生了改变
    locale 设备的本地位置发生了改变,一般指的是切换了系统语言
    touchscreen 触摸屏发生了改变
    keyboard 键盘类型发生了改变,比如用户使用了外接键盘
    keyboardHidden 键盘的可访问性发生了改变,比如用户调出了键盘
    navigation 系统导航方式发生了改变
    screenLayout 屏幕布局发生了改变,很可能是用户激活了另外一个显示设备
    fontScale 系统字体缩放比例发生了改变,比如用户选择了个新的字号
    uiMode 用户界面模式发生了改变,比如开启夜间模式-API8新添加
    orientation 屏幕方向发生改变,比如旋转了手机屏幕
    screenSize 当屏幕尺寸信息发生改变(当编译选项中的minSdkVersion和targeSdkVersion均低于13时不会导致Activity重启)API13新添加
    smallestScreenSize 设备的物理屏幕尺寸发生改变,这个和屏幕方向没关系,比如切换到外部显示设备-API13新添加
    layoutDirection 当布局方向发生改变的时候,正常情况下无法修改布局的layoutDirection的属性-API17新添加

    相关文章

      网友评论

          本文标题:Activity生命周期

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