본문 바로가기
Mobile App/Android app 만들기

[app][Android] 안드로이드 액티비티 생명주기

by 지니어스팍 2023. 11. 17.

♥ 목차 ♥

    728x90
    728x90

    안드로이드 액티비티 생명주기

    Activity

    안드로이드 4대 컴포넌트 중 하나이고 가장 기본이 되는 구성요소이다.

    컴포넌트 중에서 UI와 가장 밀접한 관련을 가지고 있기 때문이다.

     

    하루일과를 마치고 침대에 누워 유튜브를 눌렀다. 폰 중앙에 유튜브 로고가 뜨며 다음으로 실행되었다.
    너덜트 채널을 감상하며 웃고있었다. 동기부여영상이 재밌었다.
    그 순간 미국에 있는 언니에게 카톡이 왔다. 언니의 카톡을 보기위해 유튜브 앱을 나와 카톡으로 이동했다.

     

    여기서 액티비티가 크게 세개 존재한다.

    1. 처음 실행했을때 나오는 로고화면
    2. 유튜브 첫화면 및 영상화면
    3. 카카오톡 채팅 화면

    이런 액티비티는 생명주기를 갖는다. 유튜브 앱을 나와 카톡으로 이동했을 때 유튜브와 카톡의 액티비티는 각자의 생명주기에 따라 호출되는 함수들이 있다.

     

    생명주기

    생명주기를 쉽게 이해하려면 실제 화면에 표시 유무를 생각하자. 

     

    1. onCreate()

    • 최초로 앱을 실행했을때 호출되는 함수.
    • 화면 Layout 정의, View 생성, Databinding 등은 이곳에 구현함
    • 생명주기를 통틀어서 단 한번만 수행되는 메소드
    • 따라서 Activity 최초 실행에 해야하는 작업(초기화 작업)을 수행하기에 적합함

     

    2. onStart()

    • Activity가 화면에 표시되기 직전에 호출됨
    • 화면에 진입할 때마다 실행되어야하는 작업을 이곳에 구현함

    3. onResume()

    • Activity가 화면에 보여지는 직후에 호출됨
    • 현재 Activity가 사용자에게 포커스인 되어있는 상태
    • 액티비티가 실제 사용자와 상호작용이 가능한 포그라운드에 위치
    • 이 상태를 액티비티가 실행중인 것으로 보인다.

    4. onPause() 

    • Activity가 화면에 보여지지 않은 직후에 호출됨
    • 현재 Activity가 사용자에게 포커스 아웃 되어있는 상태,사용자와 상호작용이 불가능한 상태 
    • 다른 Activity가 호출되기 전에 실행되기 때문에 무거운 작업을 수행하지 않도록 주의해야함
    • 영구적인 Data는 이곳에 저장

    5. onStop()

    • 액티비티가 더이상 보이지 않을 때 호출된다.

    6. onDestroy()

    • 액티비티가 종료되거나 앱 프로세스 자체가 종료되면 호출된다.

    Activity의 Lifecycle 순서도 (출처 https://brunch.co.kr/@mystoryg/80)

     

     

    onPause() 와 onStop()

    불투명한 새로운 액티비티가 최상단으로 올라와서 기존액티비티가 완전히 보이지 않게되면 onPause()에 이어서 onStop() 까지 바로 호출된다. 

     

    다른 불투명한 액티비티가 최상단으로 올라와서 포커스가 바뀌었을때 onPause()가 일어나고 

    아예 기존 액티비티가 보여지지 않을 때 onStop() 까지 호출된다.

     

    그래서 만약 투명한 새로운 액티비티를 실행한다면 onStop()은 진행되지 않고 onPause() 만 실행한다.

     

    이때 다이얼로그를 띄어서 액티비티가 최상단이 아닌 상황은 사실상 아무런 함수가 호출되지 않는다. 

    다이얼로그도 액티비티의 일부이기 때문


    예제 타임

     

    유튜브를 보다 카톡을 킨다.

     

    [유튜브] onPause()
    [카톡] onCreate()
    [카톡] onStart()
    [카톡] onResume()
    [유튜브] onStop()

     

    카톡을 호출하면 우선 유튜브를 onPause()한다.

    그 다음 카톡을 onCreate()하고

    생성된 카톡을 onStart()하고

    시작한 카톡을 onResume() 하며 포커스인 상태가된다.

    다른 대상에 포커스인이 되어 보여지지 않으니 비로소 유튜브는 onStop() 상태에 들어간다.

     

    카톡을 종료 후 다시 유튜브가 보여진다.

     

    [카톡] onPause()
    [유튜브] onRestart()
    [유튜브] onStart() 
    [유튜브] onResume()
    [카톡] onStop()
    [카톡] onDestroy()

     

    다시 유튜브를 호출하면 카톡을 우선 onPause() 한다.

    유튜브는 onDestroy()되지 않고 onStop()된 채로 백그라운드에서 돌아가고 있기 때문에 onRestart()를 수행한다.

    onRestart()된 유튜브를 onStart() 한다. 

    다음 유튜브를 onResume()한다.

    유튜브가 비로소 포커스인 상태가 되어 사용자가 카톡을 볼 수 없기 때문에 카톡이 onStop() 상태가 된다.

    카톡을 종료하면 onDestroy() 호출 후 완전히 종료된다.

     

     

    출처 ( 감사합니다 💜)

    https://brunch.co.kr/@mystoryg/80

     

    안드로이드 액티비티 생명주기(Life Cycle)

    4대 컴포넌트 | 안드로이드 액티비티 생명주기 액티비티는 안드로이드 4대 컴포넌트 중에 하나이다. 그중에서도 UI와 가장 밀접한 관련을 가지고 있기 때문에 사실상 안드로이드 앱에 있어서 가

    brunch.co.kr

     

    https://velog.io/@its-mingyu/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-Activity-Lifecycle

     

    [안드로이드] Activity Lifecycle

    내 생명주기는 몰라도 안드로이드 생명주기는 알아야하는 이유

    velog.io

     

    728x90
    728x90