Android笔记:onSaveInstanceState和onRestoreInstanceState总结

1、方法调用时间java

  1. onSaveInstanceState是用来保存UI状态,在Activity杀死以前,它通常在onStop或者onPause以前触发;数据库

  2. onRestoreInstanceState是在onResume以前触发来恢复状态;ide

  3. Activity被杀死了,onCreate会被调用,且onRestoreInstanceState在 onResume以前恢复上次保存的信息;spa

  4. Activity没被杀死,onCreate不会被调用,但onRestoreInstanceState 仍然会被调用,在 onResume以前恢复上次保存的信息;线程




2、方法使用场景 rest

  1. onSaveInstanceState() 只有在Acitivity被系统kill掉时才会调用。因此一般onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。ci

  2. onSaveInstanceState()方法只适合保存瞬态数据, 好比UI控件的状态, 成员变量的值等,而不该该用来保存持久化数据,持久化数据应该当用户离开当前的activity时,在onPause()中保存(好比将数据保存到数据库或文件中)。说到这里,还要说一点的就是在onPause()中不适合用来保存比较费时的数据,因此这点要理解。get

  3. 因为onSaveInstanceState()方法方法不必定会被调用, 所以不适合在该方法中保存持久化数据, 例如向数据库中插入记录等. 保存持久化数据的操做应该放在onPause()中。如果永久性值,则在onPause()中保存;若大量,则另开线程吧,别阻塞UI线程。 it



3、使用方法class

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();
            }
        }
相关文章
相关标签/搜索