코린이 탈출기

chapter 9.5 - 안드로이드 액티비티의 생명주기 개념 이해 본문

인터넷 강의/클래스101 - 비전공자들을 위한 나만의 안드로이드 앱 만들기

chapter 9.5 - 안드로이드 액티비티의 생명주기 개념 이해

50HEE 2021. 6. 1. 10:59

액티비티는 사실 일종의 클래스입니다.

단지 이런 화면이 존재한다 정도입니다.

객체지향에서의 클래스는 클래스 코드를 정의만 해서는 아무런 의미가 없습니다.

객체화를 해서 메모리를 실제로 등록해야만 의미가 생깁니다. 

하지만 액티비티를 만들 때 객체화를 하지는 않습니다.

예를 들면, 'MainActivity( )'이러한 코드를 작성하지는 않습니다.

그럼에도 불구하고 액티비티를 객체화하지 않고도 핸드폰 화면에 띄울 수 있습니다.

안드로이드가 intent를 통해서 전달받은 액티비티 클래스를 대신 객체화하는 방향으로 합니다.

즉, 액티비티도 일종의 클래스로 객체화를 해주어야 화면이 만들어지는데, intent를 통해 안드로이드가 대신 객체화를 해달라고 요청하는 것입니다.

 

액티비티가 만들어지고 메모리(Ram)에 등록을 하면 화면이 나타나고 종료되기까지의 과정에서 안드로이드 시스템이 어떤 단계를 지니고 있는지 알려주기 위해 실행시켜주는 함수들을 생명주기 관련 함수라고 합니다.

지금의 위치, 어디까지 왔는지를 알려주는 것입니다.

 

 

 

이러한 함수들의 종류를 보겠습니다.

onCreate : 액티비티가 메모리에 등록이 될 때 안드로이드 시스템이 실행되는 함수입니다.

화면을 만들고 메모리를 등록한 후 코틀린 파일을 만들어졌을 때 보이는 함수입니다.

이전의 글을 보셨다면 항상 onCreate 함수 내에 코드를 작성하였습니다.

지금까지 작성했던 코드는 생명주기에 의미를 담아서 코드를 작성했다는 뜻입니다.

이 함수는 제일 먼저 실행되는 코드입니다.

액티비티의 시작점으로 동작하게 되는 함수로 최소 1번은 반드시 실행된다는 것이 보장됩니다.

대부분의 코드를 onCreate 함수를 거치도록 작성하게 되는 이유입니다.

onCreate 함수의 내부에 코드 라인 수를 최소화하는 것은 가독성을 위해 필요한데, 이는 BaseActivity를 만드는 이유입니다.

 

한 번 올린 액티비티는 최대한 재활용해주는데, 코드 작성을 통해 알아보겠습니다.

(onCreate함수 실행을 보여주기 위해 간단하게 작성하겠습니다.)

activity_main.xml
MainActivity.kt
activity_other.xml
OtherActivity.kt

위의 코드는 Intent를 이용해서 2개의 화면을 이동하도록 작성하였습니다.

Logcat

코드를 작성한 후 Logcat을 보면 위와 같이 파란색 상자처럼 로그가 찍힙니다.

하지만 메인화면의 로그만 보이고 다른 화면의 로그는 보이지 않습니다.

이는 다른 화면으로 이동하지 않았기 때문입니다. 다른 화면의 onCreate 함수가 실행되지 않았고, 그러므로 다른 화면의 onCreate 함수 내의 있는 로그는 실행되지 않습니다.

그래서 다른 화면의 로그는 찍히지 않습니다.

 

이번에는 다른 화면으로 가는 버튼을 눌러 Logcat을 실행해보겠습니다.

Logcat2

버튼을 누르면 기존에 있던 메인화면의 로그 밑에 다른 화면의 로그가 노란색 상자처럼 뜹니다.

즉, 다른 화면의 onCreate가 실행됐음을 알 수 있습니다.

 

만약 뒤로가기를 눌러 다른 화면의 창을 닫으면 어떻게 될까요?

결과는 위 Logcat과 같은 결과가 나옵니다.

그 이유는 코드 작성 전에 말한 재활용을 사용하기 때문입니다.

메인화면에 돌아갈 때는 기존에 만들어둔 액티비티를 다시 보여주기 때문에 새로 화면을 만드는 것이 아니어서 메인화면의 onCreate 함수는 다시 실행되지는 않습니다.

하지만 다른 화면으로 가는 버튼을 다시 누르면 노란색 상자처럼 다른 화면의 로그는 다시 찍힙니다.

이는 intent를 통해 실행되는 액티비티는 매번 새로 만들어주기 때문입니다.

그래서 다른 화면으로 가는 버튼을 누르면 다른 화면의 onCreate는 버튼을 누를 때마다 실행이 되어 다른 화면의 로그가 계속 찍힙니다.

 

 

다른 함수들은 따로 코딩을 하지 않고 설명하겠습니다.

onCreate 함수를 제외하고는 기본으로 작성되어있지는 않습니다.

 

onResume : 액티비티가 화면에 나타날 때마다 실행되는 함수입니다.

화면이 나타난다는 의미는 처음 만들어진 것과 가려지거나 숨겨져 있다가 다시 나오는 경우를 의미합니다.

그래서 다른 화면에 갔다 올 때마다 계속 실행됩니다.

이러한 함수를 이용하는 이유는 게시판 등에서 게시글 목록을 보다가 다른 화면에 다녀온 경우 자동 새로고침하는 등의 기능을 구현할 때 자주 사용합니다.

즉, 새 글이 있는지를 확인하는 용도 등으로 사용합니다.

 

onPuase : 액티비티가 화면에서 사라지려고 할 때 실행되는 함수입니다.

onResume 함수의 반대라고 생각하시면 됩니다.

화면이 사라진다는 것은 완전히 종료되는 것과 다른 화면에 의해 덮일 경우를 의미합니다.

이러한 함수를 이용하는 이유는 GPS 등과 같은 자원 소모가 많은 기능을 일시정지할 경우 잠시 멈추는 용도입니다.

예를 들면, 지도를 보는 중에 전화를 받는다고 합시다.

지도 사용 중에는 GPS를 사용할 것인데, 생각보다 배터리 소모가 큽니다.

지도를 보는 중에 전화가 와서 화면이 덮일 경우에는 굳이 GPS를 사용하지 않아도 됩니다.

이때 잠시 GPS를 꺼두는 형식으로 자원 소모를 줄이기 위해 사용합니다.

 

onDestroy : 액티비티가 메모리에서 소멸될 때 실행되는 함수입니다.

onCreate 함수의 반대라고 생각하시면 됩니다.

소멸될 때란 finish 함수가 완료되고 난 후 메모리에서 액티비티를 지우면서 실행됩니다.

Comments