美文网首页
activity异常状况下生命周期分析

activity异常状况下生命周期分析

作者: Liuuuuuuzi | 来源:发表于2016-08-08 13:58 被阅读78次
    异常情况下Activity的重建过程

    情况一:资源相关的西涌配置发生改变导致 Activity 被杀死并重新创建
    例如:系统横竖屏切换时,默认情况下,activity 不做特殊处理,就会被销毁并重新创建。

    当activity在异常情况下终止,系统会调用 onSaveInstanceState 来保存当前的状态,这个方法的调用时机是在onStop之前。并且该方法只会在异常终止情况下被调用。当Activity被重新创建后,系统会调用onRestoreInstanceState,并且把Activity销毁时所报存的Bundle对象作为参数传递给onRestoreInstanceState 和onCreate方法。从时序上来讲,onRestoreInstanceState 的调用时机在onStart之后。

    代码示例:

    @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            if(savedInstanceState !=null){
                String state = savedInstanceState.getString("extra_state");
            }
        }
        
    
        @Override
        protected void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            outState.putString("extra_state", "state");
        }
    
    
        @TargetApi(21)
        @Override
        public void onRestoreInstanceState(Bundle savedInstanceState,
                PersistableBundle persistentState) {
            // TODO Auto-generated method stub
            super.onRestoreInstanceState(savedInstanceState, persistentState);
            String state = savedInstanceState.getString("extra_state");
        }
    

    如果系统配置发生改变时,不想系统重新创建Activity可以给Activity指定configChanges属性。

    android:configChanges = "orientation"
    

    如果指定的minSdkVersion 和 targetSdkVersion有一个大于13,除了orientation属性,还要加上screenSize。

    android:configChanges = "orientation| screenSize"
    

    这时系统将不会调用onSaveInstanceState 和 onRestoreInstanceState来存储和恢复数据,而是调用了 onConfigurationChanged方法。

    情况二:资源内存不足发生导致低优先级的 Activity 被杀死

    Activity优先级从高到低,可以分如下三种:
    (1)前台Activity -- 正在与用户交互的Activity,优先级最高。
    (2)可见但是非前台Activity --比如 Activity 中弹出了一个对话框,导致Activity可见但是位于后台无法直接和用户交互。
    (3)后台Activity -- 已经被暂停的Activity ,比如执行了onStop,优先级最低。

    当系统内存不足时,系统就会按照上述优先级去杀死目标Activity所在进程,并在后续通过onSaveInstanceState 和 onRestoreInstanceState来存储和恢复数据。

    相关文章

      网友评论

          本文标题:activity异常状况下生命周期分析

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