2014-11-18 2 views
0

활동 라이프 사이클 문서를 완료했으며 문서 번호 onSaveInstanceState()onRestoreInstanceState()은 UI 상태를 유지하는 데 사용됩니다.활동 라이프 사이클에서 onSaveInstanceState()의 목적

사례 1 :

는 위의 방법의 사용을 테스트하려면 I 버튼을 편집 상자 간단한 레이아웃을 생성하고 전환이와 내 편집 텍스트 필드에 텍스트를 입력하고 버튼을 토글 변경 'on'을 선택하고 활동 방향을 변경했습니다. 나의 놀람에 나의 활동은 onSaveInstanceState() 방법에있는 국가를 저장하지 않고 가치를 유지할 수 있습니다.

사례 2 : 다른 활동으로 이동하여 내 활동 (이 경우에는 그 가치를 유지함)으로 돌아 왔습니다.

그래서 활동이 그 상태를 유지할 수있을 때 아래의 방법의 목적.

onSaveInstanceState() 
onRestoreInstanceState() 
+0

"super"메서드는 기본 Activity 클래스의 멤버이므로 자동으로 호출됩니다. 다른 상태를 저장하려는 경우이를 무시하여 자신의 항목을 추가 할 수 있습니다. 'super.onSaveInstanceState(); ... 내 코드 ... '에 대한 호출로 시작하십시오. – Simon

답변

1

복원에 대한 동영상 - https://www.youtube.com/watch?v=ekN2zvFytZk을 시청할 수 있습니다. 간단히 말해서 안드로이드는 계층 구조의 모든 뷰를 탐색하여 뷰의 상태를 복원하고 값 (예 : EditText 값)을 가져올 수 있습니다. 한 가지 중요한 점은 전망에 ID를 설정해야한다는 것입니다.

이러한 방법은 활동에 변수를 저장하려는 경우 유용 할 수 있습니다. 예를 들어 도서 리더를 구현 중이며 사용자가 선택한 view_mode (night_mode/day_mode)를 저장하려고 할 수 있습니다.

1

시스템의 기본 동작은 다음과 같습니다. ID가있는 뷰의 상태를 저장하는 경우이 기능은 보장되지 않으며 경우에 따라이 메서드를 재정 의하여 뷰의 상태를 저장해야합니다.

FROM DOC : "기본 구현은 ID가있는 계층 구조의 각 뷰에서 onSaveInstanceState()를 호출하고 현재 포커스가있는 ID를 저장하여 인스턴스 별 UI 상태의 대부분을 처리합니다 view (모든 것은 onRestoreInstanceState (Bundle)의 기본 구현으로 복원 됨) 각 개별보기에서 캡처되지 않은 추가 정보를 저장하기 위해이 메서드를 재정의하면 기본 구현으로 전화를 걸고 그렇지 않으면 각보기의 모든 상태를 직접 저장하십시오. "

2

이 기능의 가장 보편적 인 사용법은 다른 응용 프로그램을위한 메모리 공간을 할당하기 위해 앱이 백그라운드에서 Android OS에 의해 종료 될 때입니다.

사용자가 응용 프로그램으로 돌아 오면 마지막으로 표시된보기/값을 사용자에게 복원해야합니다. 이 작업은 onSaveInstanceState & onRestoreInstanceState를 통해 수행됩니다.

@Override 
public void onSaveInstanceState(Bundle outState) 
{ 
    // TODO Auto-generated method stub 
    super.onSaveInstanceState(outState); 

    // Save the values in a bundle which you would like to restore 
    outState.putString("vals", val1); 
}; 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) 
{ 
    // TODO Auto-generated method stub 
    super.onRestoreInstanceState(savedInstanceState); 

    // restore your values here 
    val1 = savedInstanceState.getString("vals"); 
} 
관련 문제