Android 노트: onSaveInstanceState와 onRestoreInstanceState 요약

3500 단어 android보존
1. 방법 호출 시간
  • onSaveInstanceState는 UI 상태를 저장하는 데 사용되며,Activity가 죽기 전에 onStop이나onPause 전에 터치합니다.
  • onRestoreInstanceState는 onResume 이전에 트리거하여 상태를 회복한다.
  • Activity가 죽고 onCreate가 호출되며 onRestoreInstanceState는 onResume에 저장된 정보를 복원합니다.
  • Activity가 살해되지 않았고onCreate는 호출되지 않지만onRestoreInstanceState는 여전히 호출되며onResume에 앞서 지난번에 저장한 정보를 복원합니다.

  • 2. 장면 사용 방법
  • onSaveInstanceState()는 Acitivity가 시스템 kill에 의해 제거된 경우에만 호출됩니다.따라서 통상적으로 onSaveInstanceState () 는 임시적인 상태만 저장하는 데 적합하고, onPause () 는 데이터의 지속적인 저장에 적합하다.
  • onSaveInstanceState() 방법은 UI 컨트롤의 상태, 구성원 변수의 값 등만 저장하는 데 적합하며 영구화 데이터를 저장하는 데 사용해서는 안 된다. 영구화 데이터는 사용자가 현재의activity를 떠날 때 onPause()에서 저장해야 한다(예를 들어 데이터베이스나 파일에 저장해야 한다).여기서 한 가지 더 말하자면 온하우스()에서 비교적 시간이 걸리는 데이터를 저장하는 데 적합하지 않기 때문에 이 점을 이해해야 한다.
  • onSaveInstanceState() 방법과 방법이 반드시 호출되지 않기 때문에 이 방법에 영구화된 데이터를 저장하는 것이 적합하지 않다. 예를 들어 데이터베이스에 기록을 삽입하는 등이다.영구화된 데이터를 저장하는 작업은 onPause () 에 있어야 합니다.영구적인 값은 onPause()에 저장됩니다.많은 수의 경우 UI 스레드를 차단하지 않고 다른 스레드로 전환합니다. 

  • 3. 사용 방법
    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 또는 onRestore InstanceState 메서드에서 저장된 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();
                }
            }

    좋은 웹페이지 즐겨찾기