Android笔记:onSaveInstanceState和onRestoreInstanceState总结

一、方法调用时间

  1. onSaveInstanceState是用来保存UI状态,在Activity杀死之前,它一般在onStop或者onPause之前触发;
  2. onRestoreInstanceState是在onResume之前触发来恢复状态;
  3. Activity被杀死了,onCreate会被调用,且onRestoreInstanceState在 onResume之前恢复上次保存的信息;
  4. Activity没被杀死,onCreate不会被调用,但onRestoreInstanceState 仍然会被调用,在 onResume之前恢复上次保存的信息;

二、方法使用场景

  1. onSaveInstanceState() 只有在Acitivity被系统kill掉时才会调用。所以通常onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。
  2. onSaveInstanceState()方法只适合保存瞬态数据, 比如UI控件的状态, 成员变量的值等,而不应该用来保存持久化数据,持久化数据应该当用户离开当前的activity时,在onPause()中保存(比如将数据保存到数据库或文件中)。说到这里,还要说一点的就是在onPause()中不适合用来保存比较费时的数据,所以这点要理解。
  3. 由于onSaveInstanceState()方法方法不一定会被调用, 因此不适合在该方法中保存持久化数据, 例如向数据库中插入记录等. 保存持久化数据的操作应该放在onPause()中。若是永久性值,则在onPause()中保存;若大量,则另开线程吧,别阻塞UI线程。

三、使用方法

1.在onSaveInstanceState方法中保存bundle:

    @Override
    protected void onSaveInstanceState(Bundle outState)
    {
        super.onSaveInstanceState(outState);
        mMapView.onSaveInstanceState(outState);
        
        saveState(outState);
    }
    
    @Override
    protected void onRestoreInstanceState(Bundle InState)
    {
        super.onRestoreInstanceState(InState);
        mMapView.onSaveInstanceState(InState);
        
        restoreState(InState);
    }
    /**
     * 进入三维模块后,该activity会被kill掉,此处保存被杀掉前的一些状态数据
     * 
     * @param outState
     */
    private void saveState(Bundle outState)
    {
        outState.putParcelable(HBContant.KEY_STATE_ESTATEINFO_JSON, mJson);
        outState.putParcelable(HBContant.KEY_STATE_ESTATEINFO_GALLERY, mGalleryJson);
        outState.putParcelable(HBContant.KEY_STATE_ESTATEINFO_FLASH, mFlashJson);
        outState.putParcelableArrayList(HBContant.KEY_STATE_ESTATEINFO_VIDEO, mVideoList);
        outState.putParcelableArrayList(HBContant.KEY_STATE_ESTATEINFO_NEWS, mNewsList);
        outState.putParcelableArrayList(HBContant.KEY_STATE_ESTATEINFO_HOUSELIST, mEstateHouseList);
    }
    
    private void restoreState(Bundle inState)
    {
    }

2.在oncreate或者onRestoreInstanceState方法中读取保存的bundle:

        if (savedInstanceState == null)
        {
            //正常情况
            loadTask();
        }
        else
        {
            //进入三维图被kill后返回,恢复页面数据
            mJson = savedInstanceState.getParcelable(HBContant.KEY_STATE_ESTATEINFO_JSON);
            mGalleryJson = savedInstanceState.getParcelable(HBContant.KEY_STATE_ESTATEINFO_GALLERY);
            mFlashJson = savedInstanceState.getParcelable(HBContant.KEY_STATE_ESTATEINFO_FLASH);
            mVideoList = savedInstanceState.getParcelableArrayList(HBContant.KEY_STATE_ESTATEINFO_VIDEO);
            mNewsList = savedInstanceState.getParcelableArrayList(HBContant.KEY_STATE_ESTATEINFO_NEWS);
            mEstateHouseList = savedInstanceState.getParcelableArrayList(HBContant.KEY_STATE_ESTATEINFO_HOUSELIST);
            
            
            if(mJson != null && mGalleryJson != null && mFlashJson != null && mVideoList != null && mEstateHouseList != null)
            {
                loadComplete();
            }
            else
            {
                loadTask();
            }
        }

Android笔记:onSaveInstanceState和onRestoreInstanceState总结

时间: 2024-10-24 07:50:56

Android笔记:onSaveInstanceState和onRestoreInstanceState总结的相关文章

Android 中onSaveInstanceState和onRestoreInstanceState学习

1. 基本作用: Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate().onPause()等生命周期方法,它们并不一定会被触发.当应用遇到意外情况(如:内存不足.用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState() 会被调用. 但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就

Android Activity中onSaveInstanceState和onRestoreInstanceState的使用

Android Activity的onSaveInstanceState() 和 onRestoreInstanceState()方法: 1. 基本作用: Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate().onPause()等生命周期方法,它们并不一定会被触发.当应用遇到意外情况(如:内存不足.用户直接按Home键)由系统销毁一个Activity时,onSaveInstance

Android Activity生命周期 onSaveInstanceState和onRestoreInstanceState

当某个activity变得"容易"被系统销毁时,该activity的onSaveInstanceState就会被执行,除非该activity是被用户主动销毁的,例如当用户按BACK键的时候. 注意上面的双引号,何为"容易"?言下之意就是该activity还没有被销毁,而仅仅是一种可能性.这种可能性有哪些?通过重写一个activity的所有生命周期的onXXX方法,包括onSaveInstanceState和onRestoreInstanceState方法,我们可以清

Android onSaveInstanceState和onRestoreInstanceState()

首先来介绍onSaveInstanceState() 和 onRestoreInstanceState() .关于这两个方法,一些朋友可能在Android开发过程中很少用到,但在有时候掌握其用法会帮我们起到比较好的效果.尤其是在应用程序在不知道的情况下退出后,如何实现其数据保存的功能.先来让我们看下这两个方法的有什么样的作用. 1. 基本作用:  Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 o

onSaveInstanceState和onRestoreInstanceState触发的时机

先看Application Fundamentals上的一段话:  Android calls onSaveInstanceState() before the activity becomes vulnerable to being destroyed by the system, but does not bother calling it when the instance is actually being destroyed by a user action (such as pres

Android笔记:Activity

1.Android可视化界面结构:    一个Android应用的可视化界面最底层是Activity,在他之上是一个Window对象,在window之上通常是布局容器,再上面才是用户直接交互的组件(按钮,文本框) 交互组件(UI控件)-->布局容器(layout)--->Window对象--->Activity2.Activity生命周期    Activity是以栈的形式管理的,当前活动的Activity位于栈顶,其他的Activity则处于非活动状态.        Activiy生

View的onSaveInstanceState和onRestoreInstanceState过程分析

为什么要介绍这2个方法呢?这是因为在我们的开发中最近遇到了一个很诡异的bug.大体是这样的:在我们的ViewPager中 有2页的root view都是ScrollView,我们在xml里面都用了android:id="@+id/scroll_view"这样的代码,即2个布局里面的 ScrollView用了同一个id.我们重载了ScrollView的onSaveInstanceState()用来save当前的scrollX和scrollY,在使用过程中 发现restore回来的时候其中

Activity的onSaveInstanceState和onRestoreInstanceState触发的时机

转自:http://www.cnblogs.com/heiguy/archive/2010/10/30/1865239.html 先看Application Fundamentals上的一段话: Android calls onSaveInstanceState() before the activity becomes vulnerable to being destroyed by the system, but does not bother calling it when the ins

Activity生命周期函数、onSaveInstanceState()和onRestoreInstanceState()的介绍

本文涉及了Activity中的 onSaveInstanceState() 和 onRestoreInstanceState()方法,需要注意的他们并不是生命周期方法.我放在这是为了整合起来讲解. 一.生命周期中的方法调用时机 本文转自:http://blog.csdn.net/android_tutor/article/details/5772285 1) 首次执行时执行:onCreate()->onStart()->onResume() 2) 部分可见(被对话框等遮挡)时执行:onPaus