Sitemap

[Android] 액티비티 생명주기

4 min readAug 8, 2018

--

  • 액티비티란?

안드로이드에서 액티비티(Activity)는 어플리케이션 컴포넌트이다. 쉽게 말하자면, 우리가 사용하는 스마트폰 어플리케이션에서 보이는 화면 하나 하나가 ‘액티비티’이다. 액티비티에는 사용자 인터페이스(UI)가 들어가게 된다.

사용자들이 앱을 사용할 때 화면 하나하나를 전환할 때 마다 액티비티는 실행, 일시중지, 중지의 상태를 가진다.

액티비티가 ‘실행’의 상태에 있는 경우는 스마트폰 화면 상에 액티비티가 현재 보이고 있는 상태를 의미한다. ‘일시중지’의 경우, 사용자에게 액티비티가 보이긴 하지만 다른 액티비티에 포커스가 가있는 경우이다. ‘중지’의 경우 다른 액티비티가 실행되고 있어 해당 액티비티가 보이지 않는 상태이다.

아무래도 액티비티의 상태는 사용자에게 보이는지 안보이는지에 따라 결정되는 것 같다. 그렇다면 액티비티는 어떤 구조로 사용자에게 보이게 될까?

답은 ‘스택(Stack)’이다. 스택은 특정 데이터가 메모리에 쌓이는 구조를 갖는다. 즉 먼저 들어온 순서대로 아래에서 위로 쌓이게 되어 데이터가 빠져나갈 때는 가장 나중에 쌓여서 가장 위에 있는 데이터가 가장 먼저 빠져나가게 되는 것이다. 이를 후입 선출 구조라고 한다. 액티비티는 이 스택에 열린 순서대로 쌓이게 된다.

따라서 가장 먼저 열린 액티비티가 ‘실행’ 상태에 있다가 어떤 동작에 의해 다른 액티비티가 열려서 화면에 다른 액티비티가 보이게 된다면 ‘실행’ 상태에 있던 액티비티는 ‘중지’ 상태로 바뀌게 되고 열린 액티비티가 ‘실행’ 상태로 바뀌게 된다. 메모리에는 먼저 열린 액티비티가 아래에 있고 그 위에는 현재 ‘실행’ 상태에 있는 액티비티가 쌓여서 화면 상에 보이게 되는 것이다.

액티비티가 쌓인 모습
  • 생명주기?

위에서 본 것 처럼, 액티비티는 메모리에 들어가서 소멸되기까지의 ‘생명주기’를 가지고 있다.

액티비티의 생명 주기

액티비티가 처음 실행되면 onCreate() 메소드가 호출된다. 이후에 onStart(), onResume() 메소드를 거치면 실행상태가 된다. 다른 액티비티가 스택에 쌓여 상위에 오게 되면 onPause()가 호출되고, onStop()이 호출되어 중지상태로 바뀐다. 이후, 액티비티가 소멸될 경우 onDestroy()가 호출되어 액티비티가 메모리에서 사라진다.

  • onCreate()

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

  • onStart()

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

  • onResume()

onResume() 메소드는 액티비티가 화면 상에 보여지게 되면서 사용자로부터 어떠한 동작도 받지 않았을 때 호출 된다.

  • onPause()

사용자가 해당 액티비티를 다른 액티비티로 전환 시킬 때 보내는 첫번 째 신호이다. 만약 화면을 전환하기 전 저장되지 않은 데이터가 있다면 사용자가 이 액티비티로 돌아오지 않을 것을 우려하여 이 메소드가 호출될 때 저장할 수 있다.

  • onStop()

액티비티가 더 이상 사용자에게 보이지 않을 때 호출되는 메소드이다. 다른 액티비티로 전환 시 스택에 다른 액티비티가 쌓여 가려지게 되면 호출된다.

  • onDestroy()

액티비티가 종료될 때 호출되는 메소드이다.

--

--

No responses yet