onCreate (savedInstanceState 번들)


122

누군가의 도움이 내게는에 대해 알아야 할 수 Bundle savedInstanceState에서 onCreate(Bundle savedInstanceState)나는 안드로이드에 초보자입니다. developer.android.com에서 이해하려고 노력합니다. 그러나 나는 이해할 수 없다. 누구든지 단순화 할 수 있습니까?


2
이것은 좋은 비디오입니다 : youtube.com/watch?v=kkYIMZw9gzQ
시스코 코랄 모랄레스

답변:


106

애플리케이션의 상태를 번들 (일반적으로 비 영구적 동적 데이터 onSaveInstanceState)에 저장 onCreate하면 활동을 다시 생성해야하는 경우 (예 : 방향 변경)로 다시 전달 되어 이전을 잃지 않도록 할 수 있습니다. 정보. 데이터가 제공되지 않은 경우 savedInstanceStatenull입니다.

... onPause () 메서드를 사용하여 영구 데이터 (예 : 사용자 편집)를 저장소에 기록해야합니다. 또한 onSaveInstanceState (Bundle) 메서드는 활동을 이러한 백그라운드 상태에 배치하기 전에 호출되어 활동의 동적 인스턴스 상태를 지정된 번들에 저장하여 나중에 onCreate (Bundle)에서 수신 할 수 있습니다. 다시 만들어야합니다. 프로세스의 라이프 사이클이 호스팅하는 활동에 연결되는 방법에 대한 자세한 정보는 프로세스 라이프 사이클 섹션을 참조하십시오. onSaveInstanceState (Bundle) 대신 onPause ()에 영구 데이터를 저장하는 것이 중요합니다. 후자는 수명주기 콜백의 일부가 아니므로 설명서에 설명 된대로 모든 상황에서 호출되지 않습니다.

출처


2
다른 활동이 동일한 번들을 공유합니까? 다른 활동을 시작하면 첫 번째 활동에서 번들을 전달합니까?
Francisco Corrales Morales

17

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메서드에 저장된 인스턴스 상태를로드 할 수도 있습니다 . 그러나 독자가 알아낼 수 있도록 남겨 두겠습니다.


11
savedInstanceState이전에 호출 된 null경우 비가 됩니다 onSavedInstanceState(). 방향 변경은 이것이 발생할 수있는 한 가지 예일뿐입니다.
Alex Lockwood

1
@AlexLockwood, 나는 이것이 발생할 수있는 모든 상황을 생각하려고 노력하고 있습니다. 문서가 있습니까? 내가 생각할 수있는 한 가지 예는 사용자가 앱을 전환하고 다시 돌아 왔지만 리소스를 복구하기 위해 활동이 파괴 된 경우입니다. 이 경우 android는 onSaveInsanceState ()가 재정의되면 번들로 활동을 다시 생성합니다.
batbrat 2014 년

1
@batbrat 예 ... 제가 작성한 댓글 (거의 2 년 전)은 완전히 정확하지 않습니다. 나는이다 넣어하는 가장 좋은 방법은 추측 Bundle할 인수 onCreate(Bundle)가 아닌 것 null하고는 경우 만 Activity그것의 한 onSaveInstanceState방법을 이전이라고합니다. 이것은 방향 변경 중에 발생하며 OS에 의해 종료 된 후 활동이 다시 돌아오고 장치에서 다른 관심있는 구성 변경을 트리거 할 때도 발생합니다.
Alex Lockwood

설명 Alex에 감사드립니다. 주제에 대해 약간의 명확성을 갖는 것이 좋습니다. 특히 방향 스위치 이외의 구성 변경을 잊었습니다.
batbrat 2014 년

15

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
    }
}

이제 오리엔테이션 후에도 가치를 잃지 않을 것입니다. 수정 된 값은 항상 표시됩니다.


이것은 Activity에서도 마찬가지입니다. (Bundle of Activity)와 Bundle of Fragment의 차이점에 대해 자세히 설명해 주시겠습니까?
laalaguer

한 활동이 한 번에 여러 조각을 표시 할 수있는 활동 및 조각의 수명주기를 명확하게 이해할 수 있으므로 기본적인 차이점은 활동의 모든 조각에 대해 일부 값을 저장하고 싶을 수 있다는 것입니다. 활동 번들을 사용하십시오. 그렇지 않으면 특정 조각에 대한 것이라면 조각 번들을 사용해야합니다.
Asad

5

Android의 onCreate (Bundle savedInstanceState) 함수 :

1) 활동이 처음 호출되거나 시작되면 onCreate (Bundle savedInstanceState) 메서드가 활동을 생성합니다.

2) 활동의 방향 (즉, 수평에서 수직 또는 수직에서 수평으로)이 변경되거나 어떤 운영 체제에 의해 활동이 강제로 종료 될 때 savedInstanceState, 즉 번들 클래스의 객체는 활동의 상태를 저장합니다.

3) 방향이 변경된 후 onCreate (Bundle savedInstanceState)는 활동을 호출하고 다시 만들고 savedInstanceState에서 모든 데이터를로드합니다.

4) Basically Bundle 클래스는 위의 상황이 앱에서 발생할 때마다 활동 데이터를 저장하는 데 사용됩니다.

5) onCreate ()는 앱에 필요하지 않습니다. 그러나 앱에서 사용되는 이유는 그 방법이 초기화 코드를 넣는 가장 좋은 장소이기 때문입니다.

6) 초기화 코드를 onStart () 또는 onResume ()에 넣을 수도 있으며 앱이 처음로드 될 때 onCreate ()에서와 동일하게 작동합니다.


4

onCreate(Bundle)활동이 처음 시작될 때 호출됩니다. 이를 사용하여 사용자 인터페이스 생성과 같은 일회성 초기화를 수행 할 수 있습니다. onCreate()null 또는 이전에에서 저장 한 일부 상태 정보 인 하나의 매개 변수를 사용합니다 onSaveInstanceState.


0

onCreate (Bundle savedInstanceState)가 호출되고 savedInstanceState는 위에서 설명한 시나리오 (시각적보기)에서 활동이 종료 된 경우 null이 아닙니다. 그러면 앱이 savedInstanceState에서 데이터를 가져 와서 활동을 다시 생성 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.