Activity, Fragment LifeCycle

cloud0·2021년 12월 1일
0

android 이론

목록 보기
2/2

Activity LifeCycle

개념

  • 활동 수명 주기 단계 간에 전환하기 위해 활동 클래스는 6가지 콜백으로 구성된 핵심 집합의 onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy() 를 제공합니다. 활동이 새로운 상태에 들어가면 시스템은 각 콜백을 호출합니다.

onCreate()

  • 이 함수는 필수적으로 구현해야한다.
  • 전체 LifeCycle 동안 한번만 발생한다.
  • 이 메서드에는 XML, 멤버 변수 정의, 일부 UI구성 등 설정을 한다.

onStart()

  • 활성상태에 들어가면 이 함수가 호출된다.(유저에게 보여지기 직전)
  • 호출되면 포그라운드에 보내 상호작용을 할 수 있도록 준비한다.
  • 주로 UI를 관리하는 코드를 초기화 한다. 이 메서드는 매우 빠르게 완료되고 바로 onResume을 호출한다.

onResume

  • 사용자한테 화면에 보여지고 상호작용하는 메서드이다.
  • 어떤 이벤트가 발생하여 앱에서 포커스가 떠날 때까지 이 상 태에 머무른다.
  • 이 상태에서는 생명주기 구성요소가 포그라운드에서 사용자에게 보이는 동안 실행해야 하는 모든 기능을 활성화 한다.(예:카메라 미리보기)
  • 방해가 되는 이벤트가 발생하면 일시중지 상태에 들어가고, 시스템이 onPause()를 호출한다.(예: 전화가 오거나, 사용자가 다른 화면으로 이동하거나, 기기 화면이 off될떄)

onPause()

  • 사용자가 화면을 떠날 때 시스템이 첫 번째로 이 메서드를 호출한다.(상태가 포그라운드에 있지 않게 되었다는 것을 나타냄)
  • 포그라운드에 있지 않을 때 실행할 필요가 없는 기능을 모두 정지할 수 있다. (예:카메라 미리보기 정지)
  • 시스템 리소스, 센서 핸들(GPS),사용자가 필요로 하지 않을 때 배터리 수명에 영향을 미칠 수 있는 모든 리소스를 해제할 수도 있다.(UI 관련 리소스와 작업을 완전히 해제하거나 조정할 때는 onPause보다 onStop을 사용하는 것이 좋다. 멀티윈도우 모드 or 화면분할 떄문)
  • 이 메서드는 아주 잠깐 실행되므로 저장 작업을 하기에는 시작이 부족할 수 있다. 사용자 데이터를 저장하거나, 네트워크를 호출하거나, 데이터베이스 트랜잭션을 실행해서는 안된다. 이 메서드가 끝나기 전에 완료하지 못할 수 있다. 무저운 작업을 onStop에서 하고 데이터 저장은 viewModel, onSaveInstanceState()를 참조.

onStop()

  • 포커스가 완전히 빠졌을 때 시스템은 이 콜백 메서드를 호출한다. (화면전체가 가려졌을 때 또는 백그라운드로 갔을 때)
  • 이 메서드에서는 앱이 사용자에게 보이지 않는 동안 앱이 필요하지 않는 리소스를 해제하거나 조정해야 한다.(예:애니메이션 중지, 세밀한 위치 업데이트에서 대략적인 위치 업데이트로 전환 할 수 있다)
  • onStop()에서 무거운 작업을 실해해야 한다고 했는데 예를들어 정보를 데이터베이스에 저장해야하는데 적절한 위치를 찾지 못했다면 이 메서드에서 저장할 수 있다.(하지만 이 함수는 항상 호출되는 것은 아니며 메모리가 부족할 경우 호출이 안될 수도 있다.)

onDestroy

  • Activity가 소멸되기 전에 호출된다. 시스템은 다음 중 하나에 해당할 때 이 콜백을 호출한다.
    1. 활동이 종료되는 경우 (스택에서 날리거나 finish()를 호출)
    2. 구성 변경 ( 예 : 기기회전 또는 멀티 윈도우모드) 으로 인해 시스템이 일시적으로 활동을 소멸시키는 경우
  • onStop()에서 해제하지 않은 모든 리소스를 해제해야 한다.
  • 이 메서드가 호출되는 경우 시스템이 즉시 인스턴스를 생성한 다음, 새로운 구성에서 인스턴스에 관해 onCreate()를 호출한다.

onRestart()

  • onStop()상태에 있던 화면이 다시 접근 했을 때 호출되는 콜백함수

액티비티에서 액티비티로 이동할 때 LifeCycle 순서

  1. 액티비티에서 문자가 왔을 경우(화면이 일부 가려졌을 때)

    -onCreate() ~ onResume() -> 문자옴 -> onPasue() -> 문자사라짐 -> onResume()

  2. A 액티비티에서 B 액티비티로 이동

    -A onCreate() ~ onResume() -> 화면이동 클릭 -> A onPasue() -> B onCreate() ~ onResume() -> A onStop() .. onDestroy() (상황에 따라)

  3. 액티비티에서 백그라운드로 갔다 다시 포그라운드로 복귀 시

    -onCreate() ~ onResume() -> 홈버튼(백그라운드) -> onPause() → onStop() -> 앱 복귀 -> onRestart() -> onStart() -> onResume()

Fragment LifeCycle

개념

  • 사용자가 앱을 탐색하고 상호작용할 때 프래그먼트는 추가, 제거, 화면 진입 또는 종료에 따라 수명 주기의 다양한 상태로 전환됩니다
  • Fragment LifeCycle에는 onAttach(), onCreate(), onCreateView(), onActivityCreated(), onStart(), onResume(), onPause(), onStop(), onDestroyView(), onDestroy(), onDetach() 가 있다.

  • onAttach(Activity)
    -액티비티에서 프래그먼트가 호출될 때 최초 한번 호출되는 함수
  • onCreate(Bundle)
    -프래그먼트가 생성될 떄 호출되는 함수
  • onCreateView(LayoutInflater, ViewGroup, Bundle)
    -프래그먼트의 뷰를 생성하는 함수
  • onActivityCreated(Bundle)
    -액티비티에서 onCreate()가 호출 된 프래그먼트에서 호출되는 함수
  • onStart()
    -프래그먼트가 사용자한테 보여지기 직전 호출되는 함수
  • onResume()
    -프래그먼트가 사용자와 상호작용할 수 있는 상태
  • onPasue()
    -화면이 일부 가려졌을 때 호출
  • onStop()
    -프래그먼트가 화면에 사라졌을 때 호출
  • onDestroyView()
    -프래그먼트의 View가 사라질때 호출되는 함수
  • onDestroy()
    -프래그먼트가 제거될 때 호출되는 함수
  • onDetach()
    -프래그먼트가 액티비티와 연결이 종료될 때 호출되는 함수

Activity, Fragment 차이점

Activity와 Fragment의 차이점

  1. 액티비티는 독립적으로 활용할 수 있다.
  2. 프래그먼트는 액티비티에 종속되어 있다.
  3. 액티비티는 전체화면을 차지하지만 프래그먼트는 전체 화면이 아니여도 되며 디자인에 많은 유연성을 가지고 있다.
  4. 액티비티는 자동적으로 스택에 넣어지고 프래그먼트는 트랜잭션을 통해서 요청해야 한다.

REFERENCE

profile
이...사...중......

0개의 댓글