어플을 사용할때 사용자가 화면에서 Back버튼을 누르거나 코드 상에서 finish() 메소드를 통해 Activity가 종료되는 경우 에는 화면에 남아 있는 정보를 사용할 필요를 느끼지 못한다.
이와 달리 화면 회전 등과 같이 화면의 구성만 변경되는 경우에는 사용자는 화면에 있는 데이터들을 다시 사용하기 원한다. 하지만 화면 회전 또한 Activity가 종료되고 다시 생성되는 과정을 거치며 화면에 있는 데이터들을 다시 사용하기 원한다면 데이터를 어디엔가 저장해 놔야할 것이다.
ViewModel은 다음번에 알아보고 이번 글에서는 onSavedInstanceState() 메소드를 통해 인스턴스 정보를 저장 및 호출해보겠습니다.
예시)) 화면 회전할때 EditText에 있는 데이터를 인스턴스(Bundle)에 저장하고 호출하기
1. 초기화면
2. 코드
public class MainActivity extends AppCompatActivity { //화면에 있는 editText용 변수 선언 EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Activity가 Create 됐을때 Bundle이 null인지 아닌지 체크 if(savedInstanceState != null) { //Bundle이 null이 아니라면 Toast 메세지로 보여준다. Toast.makeText(this, savedInstanceState.getString("editString"),Toast.LENGTH_LONG).show(); } } //Activity가 onStop() 됐을때(화면이 회전될때) 호출된다. @Override public void onSaveInstanceState(Bundle savedInstanceState){ //상위 클래스를 호출하는 것은 필수 - 뷰의 계층 구조 상태를 복원하기 위함 super.onSaveInstanceState(savedInstanceState); editText = findViewById(R.id.editText); String editString = (String)editText.getText().toString(); //Bundle에 데이터 넣어주기(key - value) savedInstanceState.putString("editString",editString); } }
3. 결과 - 화면이 회전 될때 마다 인스턴스(Bundle)에 저장되고 onCreate() 메서드에서 호출 할 수 있다.
참고 - "핵심 개발자 주제 - 액티비티" , android 개발자 사이트
https://developer.android.com/guide/components/activities/activity-lifecycle.html
[Android] 어플 구동 중에 전화 걸기 화면 띄우기( startActivity() , ACTION_DIAL) (0) | 2020.02.11 |
---|---|
[Android] Activity 전환하기(startActivity, startActivityForResult, Intent) (0) | 2020.02.10 |
[Android] 안드로이드 Activity 생명주기 (7) onDestroy() (0) | 2020.02.06 |
[Android] 안드로이드 Activity 생명주기 (5) onStop() (0) | 2020.02.05 |
[Android] 안드로이드 Activity 생명주기 - (4) onPause() (0) | 2020.02.04 |