Activity 生命周期

2019-03-15  本文已影响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()方法来恢复数据

上一篇下一篇

猜你喜欢

热点阅读