Android, activity와 fragment의 생명주기

이도현·2023년 9월 18일
0

Android 공부

목록 보기
25/30

0. 개요

activity와 fragment의 생명주기는 다르다 왜일까 activity와 fragment에 대해서 알아보고 이 둘의 생명주기의 대해 알아보자.

1. Activity란?

  • 정의: 'Activity'는 Android 앱에서 사용자와 상호작용하는 하나의 화면
  • 생명주기: 여러 상태(onCreate, onStart, onResume, onPause, onStop, onDestroy)를 가질 수 있으며, 이러한 상태 간의 전환이 생명중기를 형성
  • Activity LifeCycle Paradigm

1) onCreate()

  • 메서드에서 활동의 전체 수명 주기 동안 한 번만 발생해야 하는 기본 애플리케이션 시작 로직을 실행
  • onCreate() 메서드가 실행을 완료하면 시작됨 상태과 되고, 시스템이 연달아 onStart()와 onResume() 메서드를 호출
  • 예를 들어 데이터 목록을 바인딩하고, 활동을 ViewModel과 연결하고, 일부 클래스 범위 변수를 인스턴스화 함 그리고 사용자 인터페이스 선언을 한다.

2) onStart()

  • 호출되면 활동이 사용자에게 표시되고, 앱은 활동을 포그라운드에 보내 상호작용할 수 있도록 준비
  • 매우 빠르게 완료됨, 완료된 후 활동이 Resume 상태로 들어가고 onResume을 호출
  • 예를 들어 이 메서드에서 앱이 UI를 관리하는 코드를 초기화

3) onResume()

  • 재개된 상태에 들어가면 앱이 사용자와 상호작용, 어떤 이벤트가 발생하여 앱에서 포커스가 떠날때 까지 앱이 이 상태에 머뭄, 예를 들어, 전화가 오거나, 사용자가 다른 활동으로 이동하거나, 기기화면이 꺼지는 이벤트가 이에 해당
  • 이 상태에서 수명주기가 구성요소가 포그라운드에서 사용자에게 보이는 동안 실행해야 하는 모든 기능을 활성화 할 수 있음
  • 방해되는 이벤트가 발생하면 활동은 일시중지됨 상태에 들어가고, 시스템이 onPause() 콜백을 호출
  • 따라서 onResume()을 구현하여 onPause() 중에 해제하는 구성요소를 초기화하고, 활동이 재개됨 상태로 전환될 때마다 필요한 다른 초기화 작업 수행

4) onPause()

  • onPause()는 아주 잠깐 실행되므로 저장 작업을 실행하기에는 시간이 부족하다
  • 그러므로 데이터를 저장하거나, 네트워크를 호출하거나, 데이터베이스 트랜잭션을 실행해서는 안 됩니다.
  • 위와 같이 부하가 큰 종료작업은 onStop() 상태일 때 실행해야 합니다.
  • 일시중지됨 상태가 되면 Acitivity 인스턴스를 메모리에 남겨두고 시스템이 onResume을 호출할 때 인스턴스를 다시 호출.

5) onStop()

  • 활동이 사용자에게 더 이상 표시되지 않는다면, 중단됨 상태에 들어가고, 시스템은 onStop()콜백을 호출
  • 예를 들어 새로 시작된 활동이 화면 전체를 차지할 경우 적용. 시스템은 활동의 실행이 완료되어 종료될 시점에 onStop()을 호출 할 수 있다.
  • 앱이 사용자에게 보이지 않는 동안 앱은 필요하지 않은 리소스를 해제하거나 조정해야함.
  • 예를 들어, 애니메이션을 이시중지하거나, 세밀한 위치 업데이트에서 대략적인 위치 업데이트로 전환
  • CPU를 비교적 많이 소모하는 종료 작업을 실행해야 합니다.(예를 들어 정보를 데이터 베이승 ㅔ저장할 적절한 시기를 찾이 못했다면 onStop() 상태일 때 저장할 수 있습니다.)

활동이 중단되면 시스템은 해당활동이 포함된 프로세스를 소멸 시킬 수 있음. Bundle에 있는 객체 상태가 그대로 유ㅈ되고, 사용자가 이 활동으로 돌아여면 이를 복원

  • 활동이 다시 시작되면 onRestart()를 호출, Activity가 실행을 종료하면 시스템은 onDestroy()를 호출

6) onDestroy()

  • 활동이 소멸되기 전에 호출
  • 다음 중 하나에 해당될 때 이 콜백을 호출
    - 사용자가 활동을 완전히 닫거나 활동에서 finish()가 호출되어 활동이 종료되는 경우
    (마지막 수명주기 콜백)
    • 구성 변경(예: 기기 회전 또는 멀티 윈도우 모드)으로 인해 시스템이 일시적으로 활동을 소멸시키는 경우
      (즉시 새 활동 인스튼서를 생성한 다음, 새로운 구성에서 그 새로운 인스턴스에 관해 onCreate()를 호출)
  • 활도에 소멸되는 이유를 결정하는 로직을 입력하는 대신 ViewModel객체를 사용하여 활동의 관련 뷰 데이터를 포함해야 합니다. 활동이 구성 변경으로 인해 다시 생성될 경우 ViewModel은 그대로 보존되어 다음 활동 인스턴스에 전달되므로 추가 작업이 필요하지 않습니다.
  • ViewModel은 onCleared()메서드를 호출하여 활동이 소멸되기 전에 모든 데이터를 정리해야 합니다.

2. Fragment란?

  • 정의: 'Fragment'는 'Activity'내에서 재사용이 가능한 UI의 조각을 나타냅니다. 여러 개의 'Fragment'를 조합하여 하나의 'Activity'내에서 다양한 UI와 기능을 구현할 수 있습니다.
  • 생명주기 'Fragment' 또한 그 자체의 생명주기를 가지며, 이는 대체로 'Activity'의 생명주기에 종속적. But, 추가적으로 Fragment만의 특별한 상태(Attach, Create, CreateView, Start, Resume 등)가 있습니다.
  • Fragment LifeCycle paradigm

1) 최소한의 생명주기

  • onCreate(): 프로그먼트가 일시정지되거나 중단되었다가 재개되었을 때 유지하고자 하는 것을 초기화
  • onCreateView(): 이 메서드는 레이아웃의 로트, UI를 제공하지 않는 경우 null을 반환하면 됨
  • onPause(): 사용자가 프래그먼트를 떠난다는 것을 나타내는 첫번째 신호. 일반적으로 여기에서 사용자 세션을 넘어서 지속되어야 하는 변경 사항을 커밋

2) 기본적인 Fragment 클래스 대신 확장하고자하는 하위 클래스

  • DialogFragment: 부동 대화상자 표시, Activity 클래스의 대화상자 도우미 메서드를 사용하는 것의 좋은 대체 수단
  • ListFragment: 어뎁터가 관리하는 항목의 목록을 표시, 목록 뷰를 관리하는데 쓰는 몇 가지 메서드를 제공
    (예를 들어 클릭이벤트 처리, 목룍을 표시할 때는 RecyclerView를 포함한 프래그먼트를 만들어야 함)
  • PreferenceFragmentCompat: 객체의 계층을 목록으로 표시. 애플리케이션에서 설정 화면을 만드는데 사용

3) 프래그먼트 관리

  • FramentManager를 사용하기 우ㅐ해, 액티비티에서 getSupportFragmentManager()를 호출

4) 프래그먼트 트랜잭션 수행

  • 트랜잭션: 액티비티에 커밋한 변경사항의 집합
  • FramentManager에서 FragmentTrascaction을 가져와 사용할 수 있다.
  • add(), remove(), replace()와 같은 메서드 사용

5) 프래그먼트 수명 주기 처리

  • onResume
  • onPause
  • onStopped

6) 액티비티 수명 주기와의 조화

  • onAttach(): 프래그먼트가 액티비티와 연결되어 있었던 경우 호출
  • onCreateView(): 프래그먼트와 연결된 뷰 계층을 생성하기 위해 호출
  • onDestroyView(): 프로그먼트와 연결된 뷰 계층이 제거되는 중일 때 호출
  • onDetach(): 프래그먼트가 액티비티와 연결이 끊어지는 중일 때 호출

3. 왜 생명주기가 다른가?

1) 목적의 차이

  • 'Activity'는 앱의 독립적인 화면 단위로 작동, 'Fragment'는 'Activity'내에서 UI 조각으로서 작동하기 때문

2) 재사용성

  • 'Fragment'는 다양한 'Activity'에서 재사용이 가능하므로, 해당 'Fragment'가 어떤 'Activity'에 포함될지, 언제 추가 혹은 제거될지에 따라 별도의 생명주기 상태가 필요

3) 종속성

  • 'Fragment'의 생명주기는 대체로 소속된 'Activity'의 생명주기에 종속적입니다. 따라서 'Activity'가 일시정지 상태가 되면, 포함된 모든 'Fragment'들도 일시정지 상태가 됩니다.

4. 정리

'Activity'와 'Fragment'는 Android 앱 구성의 핵심요소. 이것들의 생명주기를 정확히 이해하고 관리하는 것은 앱의 안정성과 효율성을 높이는데 중유하다.

Reference

profile
좋은 지식 나누어요

0개의 댓글