[Android] Activity와 Fragment의 생명주기 (lifecycle)

곽지욱·2024년 2월 2일

Andorid

목록 보기
2/5
post-thumbnail

생명주기 (life cycle) 이란?

  • 코드가 실행되고 끝이 나는 과정을 주기로 나타낸 것을 말하고 생명주기를 잘 이해하고 있어야 코드를 구현하는 것이 원활함.

Activity 의 생명주기

  • 위 Activity의 생명주기를 보면 Activity가 처음 실행될 때, onCreate() 메소드가 호출되는데, 애플리케이션이 처음 시작할 때 최초로 실행되는 메소드임.

  • 이후에는 onStart() , onResume() 메소드를 거치며 실행상태가 됨. 사용자가 해당 액티비티를 다른 액티비티로 전환 시킬 때 onPause()가 호출되고, onStop()이 호출 되어 중지 상태로 바뀌게 됨.

  • Activity가 소멸되는 경우에는 onDestroy()가 호출되어 액티비티가 메모리에서 사라지게 됨

onCreate()

  • onCreate() 메소드는 Activity가 생성될 때 호출되어, Activity 내의 모든 요소들을 이 메소드 내에서 초기화시킬 수 있음 UI 레이아웃을 코드상으로 동작하게 하기 위하여 setContentView()를 통해 정의해주는 메소드도 해당 메소드임.

  • 생명 주기 동안 딱 한 번만 실행되는 메소드임

onStart()

  • onStart() 메소드는 액티비티가 화면에 보이기 직전에 호출되는 메소드임.

  • 화면에 진입할 때마다 실행되어야 하는 코드를 이곳에 작성하면 됨

onResume()

  • Activity의 일부가 보일 때 호출되며, 다른 액티비티가 액티비티를 덮어버리거나 앱 사용중 전화, 문자 등으로 잠시 앱을 떠나는 등 잠시 액티비티가 일시정지 되었다가 돌아오는 경우 onResume 메소드가 호출된다.

  • Activity가 재개되었을 때 실행해야 하는 코드가 있다면 이곳에 작성하면 된다.
    다만 일부가 보일때부터 전체가 보일 때 까지의 시간만큼만 수행되기 때문에 가벼운 작업만을 수행해야 한다. 만약 긴 작업을 수행한다면 버벅임이 생길 수 있음

onPause()

  • onPause() 메소드는 사용자가 해당 액티비티를 다른 액티비티로 전환 시킬 때 호출 됨. 만약 화면을 전환하기 전 저장되지 않은 데이터가 있다면 사용자가 이 액티비티로 돌아오지 않을 수 있으므로 이 메소드가 호출 될 때 저장할 수 있음 But 해당 메소드에서 시간이 많이 소요되는 코드를 처리하게 되면 다른 Activity가 호출되는 시간이 지연될 수 있음.

onStop()

  • Activity가 사용자에게 더 이상 보이지 않을 때 이 메소드가 호출되며 앞서 말한 것 처럼 무거운 작업은 이곳에서 처리해야 한다.

onRestart()

  • 사용중인 앱에서 홈으로 나갔다가 다시 돌아오거나 다른 Activity로 갔다가 뒤로 가기 버튼을 통해서 돌아오는 경우 해당 메소드가 호출된다.

onDestroy

  • 활동이 종료되는 경우나 구성변경으로 인해 시스템이 일시적으로 활동을 소멸시키는 경우에 호출되는 메소드이다.

Activity InstanceState Save Method

  • LifeCycle 에는 포함되지 않지만 Activity에서는 없어선 안되는 메소드 들이다.

  • Activity 의 상태를 저장 및 복원하는 콜백 메소드이다. Activity의 상태를 저장한다는 것은 Activity의 모습과 자료 등을 기기의 저장 장치에 저장함을 의미함.

onSaveInstanceState()

  • 상태를 저장하는 메소드로써 강제로 종료되는 상황에 대비하여 Activity의 상태 정보를 저장할 수 있음. 사용자가 화면을 강제로 회전하여 시스템이 Activity 를 종료시키면 , 종료 직전에 onSaveInstanceState() 콜백 메소드가 호출되면서 Bundle 객체에 상태를 저장할 수 있음

  • onStop() 직전에 항상 호출됨.

onRestoreInstanceState()

  • onCreate() 또는 해당 메소드를 통해 Bundle 객체를 복원할 수 있음

  • onStart() 이후에 호출되며, Activity가 강제 종료된 후 다시 켜질 때만 불리게 됨 (Ex_ 화면회전)

Fragment의 생명주기(LifeCycle)

  • Fragment는 항상 Activity 내에서 구축되어야 하며 해당 Fragment의 생명주기는 호스트 Activity의 생명주기에 직접적으로 영향을 받는다.

  • 예를들어 Activity가 일시 정지되는 경우 , 그 안의 모든 Fragment도 일시 정지 되며 Activity가 소멸되면 모든 Fragment도 마찬가지로 소멸됨.

onAttach()

  • onAttach() 메소드는 Fragment가 Activity에 연결될 때 호출되는 메소드이다. 이때까지는 Fragment가 완전히 생성된게 아님

onCreate()

  • 해당 메소드는 Activity가 Fragment를 생성할 때 호출되는 메소드이다. Activity의 onCreate() 와 마찬가지로 초기화 작업을 여기서 실행하지만 Activity와는 다르게 Fragment의 onCreate() 에서는 view와 관련된 UI 작업을 할 수 없음

onCreateView()

  • onCreateView() 는 Fragment가 UI를 그릴 때 호출되는 메소드이다. Layout 를 inflate 해서 반환해주고, view 객체를 얻을 수 있으므로 UI와 관련된 바인딩 작업을 실행하면된다.

  • Fragment의 레이아웃 루트이기 때문에 UI를 제공하지 않는 경우에는 null을 반환하면 된다.

onActivityCreated()

  • 해당 메소드는 Activity에서 onCreate() 실행이 끝난 후 호출되는 메소드이다. 이때, Activity와 Fragment의 뷰가 모두 생성되어 연결된 상태이고 view의 변경 작업이 가능함

onStart()

  • onStart 메소드는 Activity가 시작됨 상태에 들어가면 호출되는 메소드이다. 사용자에게 Fragment가 보이게 되고, 이 메소드에서 UI를 관리하는 코드를 초기화한다.

  • 이 메소드는 매우 빠르게 완료되고, 완료되면 Resumed(재개) 상태로 들어가 onResume() 메소드를 호출한다.

onResume()

  • onResume() 메소드가 호출되면 사용자와 상호작용을 한다. 어떤 이벤트가 발생하여 포커스가 떠날 때 까지 이 상태에 머무르는 것. 프로그램이 일시정지되어 onPause()를 호출하고 다시 재개되면 onResume() 메소드를 다시 호출한다. 재개 상태로 전환될 때 마다 필요한 초기화 작업들을 수행해야 한다.

onPause()

  • onPause() 는 사용자가 Fragment를 떠나면 첫 번째로 호출되는 메소드이다. 사용자가 돌아오지 않을 수도 있으므로 여기에 UI 관련 처리를 정지하고, 중요한 데이터를 저장한다.

onStop()

  • onStop() 메소드는 Fragment가 완전히 가려지는 경우 onPause()에 이어 호출되는 메소드이다. 사용자가 다시 Activity를 호출하면 다시 복원될 수 있는 상태임.

onDestroyView()

  • 해당 메소드는 Fragment와 관련된 view가 제거될 때 호출되는 메소드이다. backstack을 사용했다면 다시 해당 Fragment로 돌아올 때 onCreateView() 가 호출됨

onDestroy()

  • onDestroy() 메소드는 Activity 또는 Fragment가 소멸되기 전에 호출되는 메소드이다

onDetach()

  • onDetach() 메소드는 Fragment가 완전히 소멸되고, Activity와의 연결도 끊어질 때 호출되는 메소드이다

0개의 댓글