누군가의 도움이 내게는에 대해 알아야 할 수 Bundle savedInstanceState
에서 onCreate(Bundle savedInstanceState)
나는 안드로이드에 초보자입니다. developer.android.com에서 이해하려고 노력합니다. 그러나 나는 이해할 수 없다. 누구든지 단순화 할 수 있습니까?
누군가의 도움이 내게는에 대해 알아야 할 수 Bundle savedInstanceState
에서 onCreate(Bundle savedInstanceState)
나는 안드로이드에 초보자입니다. developer.android.com에서 이해하려고 노력합니다. 그러나 나는 이해할 수 없다. 누구든지 단순화 할 수 있습니까?
답변:
애플리케이션의 상태를 번들 (일반적으로 비 영구적 동적 데이터 onSaveInstanceState
)에 저장 onCreate
하면 활동을 다시 생성해야하는 경우 (예 : 방향 변경)로 다시 전달 되어 이전을 잃지 않도록 할 수 있습니다. 정보. 데이터가 제공되지 않은 경우 savedInstanceState
null입니다.
... onPause () 메서드를 사용하여 영구 데이터 (예 : 사용자 편집)를 저장소에 기록해야합니다. 또한 onSaveInstanceState (Bundle) 메서드는 활동을 이러한 백그라운드 상태에 배치하기 전에 호출되어 활동의 동적 인스턴스 상태를 지정된 번들에 저장하여 나중에 onCreate (Bundle)에서 수신 할 수 있습니다. 다시 만들어야합니다. 프로세스의 라이프 사이클이 호스팅하는 활동에 연결되는 방법에 대한 자세한 정보는 프로세스 라이프 사이클 섹션을 참조하십시오. onSaveInstanceState (Bundle) 대신 onPause ()에 영구 데이터를 저장하는 것이 중요합니다. 후자는 수명주기 콜백의 일부가 아니므로 설명서에 설명 된대로 모든 상황에서 호출되지 않습니다.
onCreate(Bundle savedInstanceState)
당신은 얻을 것이다 Bundle
활동 GET은 처음 시작할 때 널 (null) 및 활동 방향이 바뀌지 때 사용 드릴 것입니다 .......
http://www.gitshah.com/2011/03/how-to-handle-screen-orientation_28.html
Android는이를 달성하는 또 다른 우아한 방법을 제공합니다. 이를 위해서는 다음과 같은 메서드를 재정의해야합니다.onSaveInstanceState()
. Android 플랫폼을 통해 사용자는 모든 인스턴스 상태를 저장할 수 있습니다. 인스턴스 상태는 번들에 저장할 수 있습니다. 번들은 onSaveInstanceState 메서드에 인수로 전달됩니다.
onCreate
메서드에 인수로 전달 된 Bundle에서 저장된 인스턴스 상태를로드 할 수 있습니다 . onRestoreInstanceState
메서드에 저장된 인스턴스 상태를로드 할 수도 있습니다 . 그러나 독자가 알아낼 수 있도록 남겨 두겠습니다.
savedInstanceState
이전에 호출 된 null
경우 비가 됩니다 onSavedInstanceState()
. 방향 변경은 이것이 발생할 수있는 한 가지 예일뿐입니다.
Bundle
할 인수 onCreate(Bundle)
가 아닌 것 null
하고는 경우 만 Activity
그것의 한 onSaveInstanceState
방법을 이전이라고합니다. 이것은 방향 변경 중에 발생하며 OS에 의해 종료 된 후 활동이 다시 돌아오고 장치에서 다른 관심있는 구성 변경을 트리거 할 때도 발생합니다.
Dhruv Gairola가 대답했듯이 Bundle savedInstanceState를 사용하여 응용 프로그램의 상태를 저장할 수 있습니다. 저와 같은 새로운 학습자들이 쉽게 이해할 수있는 아주 간단한 예를 드리려고합니다.
TextView와 Button이있는 간단한 조각이 있다고 가정합니다. 버튼을 클릭 할 때마다 텍스트가 변경됩니다. 이제 장치 / 에뮬레이터의 방향을 변경하고 데이터를 잃어 버리고 (클릭 한 후 변경된 데이터를 의미 함) 조각이 처음으로 다시 시작되는 것을 확인합니다. Bundle savedInstanceState를 사용하여이를 제거 할 수 있습니다. 조각의 수명주기를 살펴보면. 조각 수명주기 할 때 "onSaveInstanceState"메소드가 호출된다는 것을 수 있습니다.
그래서 상태를 저장하면 변경된 텍스트 값을 다음과 같이 번들에 저장할 수 있습니다.
int counter = 0;
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("value",counter);
}
방향을 정한 후 "onCreate"메소드가 제대로 호출됩니까? 그래서 우리는 이것을 할 수 있습니다
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState == null){
//it is the first time the fragment is being called
counter = 0;
}else{
//not the first time so we will check SavedInstanceState bundle
counter = savedInstanceState.getInt("value",0); //here zero is the default value
}
}
이제 오리엔테이션 후에도 가치를 잃지 않을 것입니다. 수정 된 값은 항상 표시됩니다.
Android의 onCreate (Bundle savedInstanceState) 함수 :
1) 활동이 처음 호출되거나 시작되면 onCreate (Bundle savedInstanceState) 메서드가 활동을 생성합니다.
2) 활동의 방향 (즉, 수평에서 수직 또는 수직에서 수평으로)이 변경되거나 어떤 운영 체제에 의해 활동이 강제로 종료 될 때 savedInstanceState, 즉 번들 클래스의 객체는 활동의 상태를 저장합니다.
3) 방향이 변경된 후 onCreate (Bundle savedInstanceState)는 활동을 호출하고 다시 만들고 savedInstanceState에서 모든 데이터를로드합니다.
4) Basically Bundle 클래스는 위의 상황이 앱에서 발생할 때마다 활동 데이터를 저장하는 데 사용됩니다.
5) onCreate ()는 앱에 필요하지 않습니다. 그러나 앱에서 사용되는 이유는 그 방법이 초기화 코드를 넣는 가장 좋은 장소이기 때문입니다.
6) 초기화 코드를 onStart () 또는 onResume ()에 넣을 수도 있으며 앱이 처음로드 될 때 onCreate ()에서와 동일하게 작동합니다.