안드로이드 액티비티 라이프사이클(Activity-Lifecycle)

1. 개요

안드로이드 애플리케이션에서 4대 필수 요소 중에서도 가장 중요한 역할을 하는 액티비티의 라이프사이클(Activity-Lifecycle), 생명주기에 대해서 설명한다.

2. 액티비티(Activity)

액티비티란 애플리케이션의 구성 요소로서 하나의 화면을 나타내며 버튼, 텍스트, 레이아웃 등과 같은 뷰들이 액티비티에 배치된다.

예를 들어 게임 애플리케이션이라면 로그인창을 표시하는 액티비티가 있고 서버목록 리스트를 표시하는 액티비티가 있으며 게임화면을 나타내는 액티비티가 따로 존재한다.

위에서 말하는 것만 보면 하나의 화면은 하나의 액티비티로 구성된 것처럼 보이지만 액티비티는 작은 창으로 다른 창에 띄울 수도 있다.

위의 설명한 바를 그림으로 표현하면 다음과 같다.
Activity-Lifecycle
1. MainActivity.java

2. activity_main.xml

위 코드는 Basic Activity 로 만든 프로젝트를 생성한 경우 만들어지는 기본 코드이다. (2019.3.28 기준)

이대로 컴파일 후 실행시켜보면 다음과 같은 화면을 볼 수 있다.
Activity-Lifecycle

지금까지 “Hello World!” 라는 문자열이 바로 화면 위에 표시된 것으로 알고 있었다면 이제는 빈 액티비티위에 표시된다는 것을 알게되었다.

3. 액티비티 라이프사이클(Activity-Lifecycle)

액티비티는 어떠한 상황이 발생하면 해당 상황에 대한 신호를 콜백 메소드(Call-back methods)를 통해 제공한다.

우리는 이러한 콜백 메소드를 통하여 그러한 상황을 알 수 있으며 상황에 따라 필요한 코딩을 할 수 있다.

그럼 어떠한 상황이 있는지, 언제 발생하는지 알아야 하는데 이것이  이해하기 위한 정보가 라이프사이클이다.

Activity-Lifecycle

3.1 onCreate()

특수한 경우를 제외하고 액티비티가 최초에 한 번 실행된다. 그래서 보통 “findViewByID” 같은 메소드가 사용된다.

3.2 onStart()

“onCreate()” 와 “onRestart()” 의 존재때문에 실질적으로 사용할 일이 거의 없다.

자세하게 이야기 하자면 “onStop” 에서 다시 액티비티로 돌아오는 경우라면 “onRestart()” 에서 처리하면 될 것이고 액티비티가 처음 실행되는 경우라면 “onCreate()” 에서 코딩을 하면 되기 때문이다.

결론은 “onCreate()” 와 “onRestart()” 과 비교하여 필요한 경우가 생기는 경우에 사용하면 된다.

3.3 onResume()

보통 “onStart” 에서 넘어올 때보다 “onPause” 에서 넘어오는 경우에 사용되는 경우가 많다. 액티비티가 투명해졌다가(포커스를 잃어버린 경우) 돌아오는 경우에 중지되는 쓰레드을 다시 살려야 하는 경우 사용할 수 있다.

3.4 onPause()

“dialog” 같은 팝업창이 뜨면 액티비티가 투명화되는 것을 볼 수 있을 것이다. 그 때 실행되는 메소드이다.

보통 “onResume” 에서 작업하던 사항을 멈추거나 저장하는 코드를 사용한다.

3.5 onStop()

백그라운드모드가 되거나 다른 애플리케이션, 액티비티가 사용되어 현재 사용하는 액티비티가 보이지 않는 경우 실행되는 메소드이다.

이런 경우 메모리 절약을 위해 다르게 말하자면 메모리 부족으로(메모리 절약을 위해 이 액티비티에 메모리를 할당하지 않기에) 프로세스 자체가 강제 종료될 수도 있다.

예를 들어 게임을 하는데 메세지가 와서 답장을 하려고 메세지 앱을 키는 순간 메모리 부족으로 게임이 종료되었다면, 그 때 자동 저장 기능이 없다면 데이터를 전부 날리게 된다.

그래서 보통 이 메소드에서는 데이터 저장을 위한 코드를 많이 작성한다.

3.6 onDestroy()

액티비티가 완전히 종료되는 경우 실행되는 메소드이다.

3.7 onRestart()

“onStop()” 상태에서 다시 액티비티로 돌아오는 경우 실행되는 메소드이다

4. 액티비티 라이프사이클(Activity-Lifecycle) 테스트

다음 코드는 각 라이프사이클을 로그로 확인할 수 있도록 만든 코드이다.

1. MainActivity.java

애플리케이션을 실행, 종료, 백그라운드 등의 작업을 하면 그에 따라 실행되는 메소드를 확인할 수 있다.

5. Reference

Android Developer “Understand the Activity Lifecycle”