안드로이드 8) Activity Lifecycle

밍나·2022년 1월 15일
0

Android

목록 보기
8/36

Activity Lifecycle

1. Lifecycle
activity lifecycle

  • Lifecycle 함수 : 시스템에서 액티비티의 라이프사이클을 관리하면서 자동 호출되는 함수
    • 활성상태 : 액티비티의 화면이 출력되고 있고 유저가 이벤트를 발생 시킬 수 있는 상태, 위 그림에서 보라색 박스
    • 일시정지상태 : 액티비티의 화면이 출력되고 있지만 유저가 이벤트를 발생 시킬 수 없는 상태, 위 그림에서 노란색 박스
    • 비활성상태 : 액티비티의 화면이 출력되고 있지 않는 상태, 종료된 것은 아님, 위 그림에서 주황색 박스

2. 활성상태
image

  • 활성상태 : 하나의 Activity가 실행되어서 화면에 출력되고 유저 이벤트를 받아들일 수 있는 상태
  • 객체가 생성된 후 onCreate(), onStart(), onResume() 함수까지 호출된 상태가 활성 상태
  • 보통 setContentView() 함수가 onCreate()에서 실행됨(onStart()나 onResume()에 비해 onCreate()는 최초 한번만 실행되기 때문)

3. 일시정지상태
image

  • 일시정지상태 : 유저 화면에 여전히 보이지만 유저 이벤트를 받아들이지 못하는 상태
  • onPause() 함수가 호출된 상태가 일시정지 상태
  • ex) A 액티비티를 띄어놓았는데 split view로 만들어서 B 액티비티를 띄우고 B 액티비티가 전면에 나오게 되는 경우
  • 일시정지상태이다가 활성상태로 바뀔 때는 onResume() 함수가 다시 호출

4. 비활성상태
image

  • 비활성상태 : 종료되지는 않았지만 유저 화면에 안보이는 상태
  • 활성상태인 Activity가 onPause(), onStop() 함수까지 호출된 상태가 비활성상태
  • 객체가 소멸되지는 않음
  • ex) A 액티비티에서 B 액티비티로 화면 전환했을 때 A 액티비티의 상태
  • 비활성상태이다가 활성상태로 바뀔 때는 onRestart(), onStart(), onResume() 함수까지 다시 호출

Save Instance

1. 액티비티 상태 저장

  • Save Instance : 액티비티의 상태 저장 기법
  • 액티비티가 종료되면 액티비티의 데이터는 모두 사라진다.
  • 다시 실행시 복원 시켜야 하는 데이터가 있다면, 하지만 DB에 저장하기는 과한 경우 상태 저장 기법을 이용해야 한다.

2. 액티비티 상태 저장 예제

  • 대표적인 예제 : 화면 회전
    • onCreate() → onStart() → onResume() 과정으로 액티비티가 실행
    • 이 상태에서 디바이스를 화면 회전 시키면 onPause() → onStop() → onDestroy() → onCreate() → onStart() → onResume() 과정으로 액티비티가 종료되었다가 실행됨
    • 그래서 화면 회전 전의 데이터는 모두 사라지고 초기 상태가 나옴

3. Bundle

  • onCreate(), onSaveInstanceState(), onRestoreInstanceState()의 매개변수
  • Bundle : 데이터를 key-value 성으로 저장하고 있는 Map 객체
  • Bundle에 담기는 데이터가 액티비티가 종료되어도 유지되었다가 다시 실행되었을 때 연결을 시켜준다.
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_detail)
}

override fun onRestoreInstanceState(savedInstanceState: Bundle) {
    super.onRestoreInstanceState(savedInstanceState)
}

override fun onSaveInstanceState(outState: Bundle, outPersistentState: PersistableBundle) {
    super.onSaveInstanceState(outState, outPersistentState)
}
  • onSaveInstanceState() : 저장해야하는 데이터가 있는 경우 액티비티가 종료되기 전에 이 함수를 오버라이드 받아서 데이터를 저장
  • onCreate(), onRestoreInstanceState() : 액티비티가 다시 실행됐을 때 복원할 데이터가 있는 경우 사용
    • 차이점 : 데이터에 따라서 UI 구성을 다시 하는지 안하는지의 차이(보통 UI 구성은 onCreate()에서 하니까)
outState.putString("data1", "hello")
outState.putInt("data2", 10)
  • Bundle에 데이터 저장은 putString(), putInt() 등의 함수 사용
count = saveInstanceState.getInt("count")
  • Bundle 객체에서 데이터 획득은 getString(), getInt() 등의 함수 사용
profile
🤗🤗🤗

0개의 댓글