美文网首页
Activity 生命周期

Activity 生命周期

作者: 橙果子 | 来源:发表于2019-03-15 17:06 被阅读0次
    Activity生命周期图

    Activity 的四种形态

    Activity任务栈:先进后出, 队列: 先进先出

      1. Activity/Running : 栈顶,可见,可与用户交互
      2. Paused : 失去焦点(如界面弹窗),被透明的Activity放在栈顶时,此时的Activity失去了与用户交互的能力,状态信息与成员变量还在,只有在内存紧张的情况被回收
      3. Stoped :一个Activity被另外一个Activity完全覆盖,被覆盖的Activity进入Stoped状态,不再可见,但和Paused状态一样保持着状态信息和成员变量
      4. Killed :Activity被系统回收掉
        
        

    生命周期的不同走向

        1. 正常情况

        2. 跳转

        3. 横竖屏切换

    如何防止横竖屏切换Activity重建,在清单Activity中配置:

    <activity  android:configChanges="orientation|screenSize" />
    


        4. 锁屏/开屏



    对比不同

    onStart() onResume()
    可见 可见
    未出现在前台,可理解为Activity已经显示出来了,但是在后台(例如:界面覆盖了一层半透明) 在前台
    不能交互 可交互
    onPause() onStop()
    位于前台 位于后台
    一个界面到另一个界面,先onPause,再onStop 跳转后,底层的activity在onStop方法,位于后台

    异常情况下的生命周期

    系统出现异常情况下自动调用onSaveInstanceState()onRestoreInstanceState()方法

    @Override
       @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
       //可恢复在onSaveInstanceState()方法中保存的数据
        }
    
        @Override
        public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
            super.onSaveInstanceState(outState, outPersistentState);
            Log.d(TAG,"onSaveInstanceState is invoke");
           //通过Bundle来保存数据
        }
    
        @Override
        protected void onRestoreInstanceState(Bundle savedInstanceState) {
            super.onRestoreInstanceState(savedInstanceState);
            Log.d(TAG,"onRestoreInstanceState is invoke");
            //可恢复在onSaveInstanceState()方法中保存的数据
        }
    

    onCreate()方法和onRestoreInstanceState()方法都可以恢复数据,他们的区别是:
    ----onCreate()方法中的Bundle需要判断是否为null
    ----在调用onRestoreInstanceState()方法时,参数Bundle不能为空,所以可不必在此方法中判空,推荐使用onRestoreInstanceState()方法来恢复数据

    相关文章

      网友评论

          本文标题:Activity 生命周期

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