티스토리 뷰

Activity의 LifeCycle

  • 안드로이드 앱은 여러개의 액티비티가 연결되어있는 구조라고 볼 수 있고, 각 액티비티는 생명주기에 따라 관리된다
  • 액티비티의 클래스는 다음과 같이 6개의 콜백 함수를 제공한다

✔️ onCreate()

  • 어플리케이션 최초 실행 시 가장 처음으로 한 번 실행되는 함수
  • 해당 Activity의 생명주기 중 딱 한번만 실행되며 viewModel연결과 인스턴스 생성 등 초기화 작업을 이 안에서 실행하면 된다
  • onCreate() 메소드를 실행 완료하면 Activity는 시작됨 상태에 진입한다
  • onCreate 함수에 항상 매개변수로 있는 savedInstanceState는 이전 Activity의 상태를 가지고 있는 Bundle객체이다
  • ex) 세로에서 가로로 화면회전시, onDestroy()가 실행되기 직전 onSaveInstanceState()에서 Bundle 객체 저장 후 onCreate()를 실행하기 때문에 화면회전 후에도 데이터가 그대로 유지된다

✔️ onStart()

  • Activity가 시작됨 상태에 진입하면 Activity가 화면에 보이기 직전 빠르게 onStart()가 실행된다
  • 이 단계에서 앱은 Activity를 foreground로 보내 사용자와 상호작용할 수 있도록 준비한다
  • onStart() 메소드를 실행 완료하면 Activity가 재개됨 상태로 진입한다

✔️ onResume()

  • onStart()실행 후 바로 onResume()이 호출되며 이 상태에 들어가면 사용자가 앱과 상호작용을 할 수 있다
  • 전화가 오거나 홈버튼을 누르거나 다른 Activity로 이동하는 등의 이벤트가 발생해 포커스를 잃기 전까지 이 상태에 머문다

✔️ onRestart()

  • Activity가 중단됨 상태에서 다시 호출되었을 때 실행된다
  • onRestart() 뒤에는 항상 onStart()가 실행된다

✔️ onPause()

  • onResume()상태에서 이벤트가 발생해 포커스를 잃게되면 Activity는 일시정지 상태가 되며 onPause()를 호출한다
  • Activity가 완전히 가려지지않고, 일부분이 보이거나 투명 Activity가 실행되었을 시에는 onPause()까지만 실행이 된다
  • onPause()상태를 유지하다가 Activity가 다시 포커스를 얻게되면 onResume() 콜백을 실행한다
  • 다른 Activity 실행 전에 실행되기 때문에 onPause()에서 너무 많은 작업을 하게되면 다음 Activity가 실행이 지연되게 된다

✔️ onStop()

  • Activity가 중단됨 상태에 진입하면 onPause()에 이어 onStop()까지 호출하게 된다
  • 홈버튼을 누르거나 새로운 Activity가 실행되어 해당 Activity가 완전히 보이지 않게되는 경우에 해당한다
  • 이 상태에서 Activity를 다시 시작하면 onRestart()를, Activity 실행을 종료하면 onDestroy()를 실행한다
  • 예를들어, 홈버튼을 누른 상태에서 다시 앱을 실행하면 onRestart()에 이어 onStart()까지 실행되고, 뒤로가기를 눌러 앱을 종료하면 onPause() , onStop()에 이어 onDestroy()까지 호출한다

✔️ onDestroy()

  • Activity에서 finish를 실행 해 Activity가 종료되어 스택에서 사라질 때 호출된다

 

Fagment의 LifeCycle

  • Fragment는 Activity에 소속되는 것이므로 Activity와 연관된 생명주기를 가진다

✔️ onAttach()

  • Fragment가 Activity와 연결될 때 호출된다
  • 아직 Fragment가 완벽하게 생성된 상태는 아니다

✔️ onCreate()

  • Activity에서 Fragment를 호출하여 생성될 때 호출된다
  • Activity의 onCreate()와 마찬가지로 초기화작업을 여기서 실행하면 된다
  • Fragment를 생성하며 Activity에서 넘겨준 값이 있다면 여기서 변수에 넣어주면 된다
  • 다만, Activity와는 달리 Fragment의 onCreate()에서는 view와 관련된 UI작업을 할 수 없다

✔️ onCreateView()

  • Fragment에서 UI를 그릴 때 호출되는 콜백이다 
  • Layout을 inflate해서 반환해주고, view 객체를 얻을 수 있으므로 UI와 관련된 바인딩 작업을 실행하면 된다
  • onCreateView의 매개변수로 전달되는 container가 Activity의 ViewGroup이며, 여기에 Fragment가 위치하게 된다
  • 또 다른 매개변수인 savedInstanceState는 Bundle 객체로 Fragment가 재개되는 경우 이전 상태에 대한 데이터를 제공한다

✔️ onActivityCreated()

  • Activity에서 onCreate() 실행이 끝난 후 호출된다
  • Activity와 Fragment의 뷰가 모두 생성되고, 연결된 상태이고, view의 변경 작업이 가능하다

✔️ onStart()

  • Activity와 같이 Fragment가 화면에 보여지기 직전 빠르게 실행된다
  • 여기서 Activity는 시작됨 상태이다

✔️ onResume()

  • Fagment가 화면에 보여지며 사용자와 상호작용이 가능한 시점이다
  • Activity와 마찬가지로 이벤트가 발생하여 Fragment가 가려지기 전까지 이 상태가 유지된다

✔️ onPause()

  • 부모 Activity가 아닌 다른 Activity가 위로 올라오거나, 다른 Fragment가 add되는 경우 일시정지 상태로 들어간다
  • UI관련 처리를 정지하고, 중요한 데이터를 저장한다

✔️ onStop()

  • Fragment가 완전히 가려지는 경우 onPause()에 이어 onStop()까지 실행된다
  • 시스템에서 onStateInstance()를 호출하여 UI의 상태를 저장하므로 Activity를 다시 띄우면 이전 상태가 그대로 보여진다

✔️ onDestroyView()

  • Fragment와 관련된 view가 제거될 때 실행된다
  • Activity에서 Fragment 생성 시 addToBackStack()를 요청했을 경우 onDestroy()를 호출하지 않고 인스턴스가 저장되어 있다가 Fragment를 다시 부를 때 onCreateView()를 실행하여 다시 화면에 보여지게 한다

✔️ onDestroy()

  • view가 제거된 후 Fragment가 완전히 소멸되기 전에 호출된다

✔️ onDetach()

  • Fragment가 완전히 소멸되고, Activity와의 연결도 끊어질 때 실행된다

🕊 참고자료

 

Activity 수명 주기에 대한 이해  |  Android 개발자  |  Android Developers

An Activity is an application component that provides a screen with which users can interact in order to do something, such as dial the phone, take a photo, send an email, or view a map. Each activity is given a window in which to draw its user interface��

developer.android.com

 

프래그먼트  |  Android 개발자  |  Android Developers

A Fragment represents a behavior or a portion of user interface in an Activity. You can combine multiple fragments in a single activity to build a multi-pane UI and reuse a fragment in multiple activities. You can think of a fragment as a modular section��

developer.android.com

 

Fragment addToBackStack

addToBackStack을 사용하게 되면 화면을 Stack에 저장합니다. Back버튼을 눌렀을 때 스택에 저장된 프래그먼트가 사라지게 됩니다.    기본 메인화면에서 addToBackStack을 이용해 화면을 저장하고 또 되��

jhpop.tistory.com

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함