반응형

지금 생각해 보면 정말 기본적인 거지만 한참 공부를 시작했을 때 대수롭지 않게 여겼던 것이 라이프사이클이다. 실습용 앱을 만들면서도 어지간한 기능들은 전부 'onCreate()'선에서 실행시켰었다. 하지만 요즘 이론적인 공부를 하며 다시금 깨닫게 된 것은 앱을 개발함에 있어서 생명 주기는 정말 중요한 부분이고 기본적인 것들은 숙지해두고 있어야 한다고 생각했다. 때문에 기초적인 부분부터 모르는 부분들까지 조사하고 알아보려 한다.


생명 주기란 무엇인가?

 

머릿속에 기억을 남기기 위해 음식점 조리사의 입장에서 빗대어 생각하려 한다. 음식점에 손님이 들어와 주문을 하면 조리사는 주문을 확인한 후 조리를 한다. 예약제가 아닌 이상 손님이 어떤 음식을 언제 와서 주문할지 모르니 먼저 만들어 놓을 수 없다. 주문을 받고(onCreate) 조리해서(onStart) 손님에게 서빙되어(onResume) 일련의 과정이 완료된다. 또한 손님이 주문한 요리는 여러 가지일 수 있다. 스테이크를 먹다가 샐러드를 곁들여 먹으려 잠시 스테이크를 썰던 손을 멈추고(onPause) 샐러드 접시로 손을 옮겨 샐러드를 먹다가(onStop) 다시 남은 스테이크를 먹을 수 있다(onRestart-onStart). 그렇게 식사를 하다가 모든 음식을 다 먹고 나간다(onDestroy).

 

이번에는 스마트폰으로 넷플릭스를 본다고 생각해 보자. 넷플릭스 앱 아이콘을 눌러 실행시킨다. 화면에는 넷플릭스의 스플래시 화면이 나오고(onCreate) 잠깐의 대기 시간 이후(onStart) 넷플릭스 홈 화면이 보여진다(onResume). 어떤 걸 볼까 고르다가 재미있어 보이는 작품의 상세 페이지 보기를 눌러 팝업 창으로 살펴본다(onPause). 하지만 내가 생각했던 작품이 아닌 것 같아 아무 곳이나 눌러 팝업 창을 없애고 나서(onResume) 다시 볼만한 작품을 찾다가 재미있어 보이는 작품이 보여 재생시킨다(onPause-onStop). 재미있게 작품을 모두 보고 넷플릭스 앱을 종료한다(onDestroy).

 

물론 실제로는 스플래시 화면이 사용자 눈에 보이는 시점부터 스플래시 액티비티 자체의 생명주기는 onResume까지 진행되지만 예시를 위해 간략하게 나타냈고 메인이 되는 액티비티를 기준으로 설명했다.

 

이처럼 사용자가 앱을 사용할 때도 앱의 상태는 수시로 변할 수 있다. 이 일련의 패러다임을 '생명 주기'라고 한다.

Android Lifecycle

처음에 접했을 때는 크게 복잡해 보이지 않았지만 생각처럼 단순한 구조가 아니라는 걸 깨닫는 데 그리 긴 시간이 걸리지 않았다. 실제 앱을 사용하거나 개발하다 보면 하나의 액티비티에서 여러 다른 액티비티나 다이얼로그, 이동 하물며 다른 앱의 알림이나 전화가 걸려오는 등 상태는 시도 때도 없이 변화하며 보기와는 다른 경우도 많았기 때문이다.

 

각 상태들은 어떤 경우일 때 실행되는 거지?

단순한 순서는 이미지에서 보이는 것과 같이 onCreate() ~ onStart() ~ onResume() ~ onPause() ~ onStop() ~ onDestory() 순으로 실행되며, 각 상태마다 수행하는 일이 다르다.

 

onCreate()는 액티비티가 생성될 때 가장 먼저 실행되며 라이프 사이클에서 단 한 번만 발생한다. 때문에 이 때는 데이터를 바인딩하거나 뷰 모델과 연결하고 레이아웃을 그리는 등 초기화와 관련된 작업을 수행시킨다.

onStart()는 사용자가 액티비티에게 시각적으로 제공되기 직전에 수행된다. 한번 onCreate()로 인해 한번 실행된 이후의 최초 수행 시점이기 때문에 액티비티에 돌아올 때마다 수행되어야 하는 작업을 넣는다.

onResume()은 사용자에게 시각적으로 보여지고 사용자가 액티비티와 상호작용할 수 있고 포커스 되어 있는 상태이다.

onPause()는 액티비티가 다른 액티비티로 인해 일부가 가려져 사용자의 포커스가 넘어간 상태이다.

onStop()은 액티비티가 다른 액티비티로 인해 완전히 가려진 상태이다.

onDestroy()는 액티비티가 종료될 때의 상태이다.

onRestart()는 기존의 액티비티에서 다른 액티비티로 완전히 가려져 포커스가 넘어간 이후 다시 기존의 액티비티로 돌아올 때의 상태이다.

 

이렇게 현재 액티비티의 상태에 따라 시시각각 변화하기 때문에 각 상태에 필요한 기능들을 적재적소에 맞게 배치하는 것이 중요하다.

처음 봤을 때는 영락없이 onStart()가 완전히 시작된 상태이고 onResume()이 onRestart()와 같은 기능인 줄 알았던 때도 있었다... 


이 글에서 설명한 라이프사이클은 '액티비티'의 라이프사이클이다. 같은 맥락으로 '프래그먼트'의 라이프사이클도 있고 '서비스'의 라이프사이클도 있다고 한다. 이 또한 다음 글 작성 시에 조사해서 알아보려 한다.

 


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

 

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

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

brunch.co.kr

https://developer.android.com/guide/components/activities/activity-lifecycle?hl=ko 

 

활동 수명 주기에 관한 이해  |  Android 개발자  |  Android Developers

활동은 사용자가 전화 걸기, 사진 찍기, 이메일 보내기 또는 지도 보기와 같은 작업을 하기 위해 상호작용할 수 있는 화면을 제공하는 애플리케이션 구성요소입니다. 각 활동에는 사용자 인터페

developer.android.com

https://velog.io/@sh1mj1/Activity-LifeCycle-%EC%95%A1%ED%8B%B0%EB%B9%84%ED%8B%B0-%EC%83%9D%EB%AA%85%EC%A3%BC%EA%B8%B0

 

Activity LifeCycle (액티비티 생명주기)

사용자가 앱을 사용하다가, 앱에서 나가고, 앱으로 다시 돌아오면 액티비티 인스턴스는 수명주기 안에서 "상태"가 바뀐다. Activity 클래스에서는 액티비티가 상태 변화를 알아차릴 수 있는 콜백

velog.io

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

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기