본문 바로가기

안드로이드앱 코딩_AndroidApp/안스_코틀린_쪼개기

파편007_Activity & Life Cycle_액티비티 생명주기

안드로이드 시스템은 Activity(액티비티) 클래스를 기본 단위로 작동한다. 안드로이드 스튜디오에서 프로젝트를 만들면 디폴트(기본)로 MainActivity(메인 액티비티)가 만들어 진다.

 

Activity는 '활동'이라는 뜻 그대로 안드로이드 시스템에서는 앱에서 일어나는 움직임(활동)에 반응하는 기본적인 시스템을 갖추고 있다. 시작하여 끝날 때 까지를 '생명 주기 또는 수명 주기'라고 한다면 앱도 Life Cycle (생명주기, 수명주기)를 가지고 있다.

 

클래스에 의해 만들어지는 객체를 Instance(인스턴스)라고 한다.

앱을 시작하면 MainActivity에서 상속 받은 onCreate함수를 실행하고 인스턴스(객체)를 만든다. 

만든 인스턴스(객체)를 메모리에 올린다.

 

폰 아래에는 버튼이 있다.

'앱 실행전'의 상태는 인스턴스(객체)가 메모리에 존재하지 않는 상태다.

예를 들면 앱이 실행 전이거나 Back(뒤로) 버튼을 눌러 액티비티 밖으로 나간 상태다.

 

'멈춤 Stopped' 상태는 메모리에 인스턴스(객체)가 있긴 하지만 보이지 않는 상태다.

예를 들면 다음과 같은 상황이다.

다른 액티비티가 전체화면으로 나타난다.

Home(홈) 버튼을 눌렀다.

Recents(최근) 버튼을 눌렀다.

 

'일시 정지 Paused' 상태는 액티비티가 전체 또는 부분이 보이기는 하지만 활성화 되어 있지 않은 상태다.

예를 들면 키패드가 앞으로 나온 경우나 다중 창 기능으로 앱 2개를 동시에 띄운 상태 등이다.

 

'다시 시작, 재개 Resumed' 상태는 제일 앞쪽으로 나온 액티비티를 현재 사용하고 있는 상태다.

 

 

 

 

 

 

사용자가 폰을 사용하는 도중에는 여러 가지 환경 변화가 일어난다. 전화가 오거나 다른 앱으로 갔다가 다시 돌아 오거나 또는 폰이 꺼지거나 등의 활동들이 일어난다.

 

그래서 안드로이드 시스템은 이런 상황에 대하여 액티비티가 시작한 후 앱의 상태 변화에 따라 반응하는 CallBack(콜백, 반응호출) 함수를 가지고 있다. 

 

예를 들면 위 그림에서 액티비티가 실행된 후 다른 액티비티가 앞으로 나오면 onPause() 함수가 호출되고, 그 액티비티가 전체화면이 되어 보이지 않을 때는 onStop()함수가 호출되는 식이다. 그러므로 각 콜백 함수에 코드를 작성하여 두면 해당 상황이 발생했을 때 어떻게 행동할 지 정해 줄 수 있다.

 

제일 위에 액티비티가 시작하면 제일 먼저 호출해서 실행하는 것이 onCreate() 함수다. onCreate()함수는 프로젝트를 만들면 메인액티비티에 기본으로 코딩되어 있는 함수다.

 

액티비티의 생명주기에 따르면 액티비티가 실행되기 전까지 2가지 단계를 더 만들어 두었다. 필요할 때 함수 내용을 작성하면 순서에 따라 실행할 수 있다. 

 

액티비티가 시작하고 나서 부터 호출되는 콜백함수 3개

 

onCreate

onStart

onResume

 

액티비티가 실행하고 나서 부터 호출되는 콜백 함수 3개

 

onPause

onStop

onDestroy

 

위 함수들은 액티비티의 생명주기에 해당하는 핵심 함수들이고 이외에 다양한 콜백 함수들이 있다.

사용법은 게임을 만들면서 하나씩 알아보기로 한다.

 

참고로 on은 '위에'라는 뜻으로 '어떤 상태에 있다'를 나타내는 말이다.

예를 들면 on line은 '전화가 걸려온 상태'를 나타낸다. 여기서 line은 전화선을 뜻한다.

함수명과 연결하면 어떤 뜻인지 알 수 있을 것이다.

 

Create(만들다, 창조하다)

Start(시작하다)

Restart(다시 시작하다)

Resume(다시 시작하다)

Pause(일시 정지하다)

Stop(멈추다)

Destroy(파괴하다. 끝내다)

 

콜백 함수의 사용 방법은 실제 앱을 만들 때 설명 한다.

 

참고로 콜백 함수가 언제 작동하는 지 Logcat(로그캣)으로 확인하려면 'Debug_디버그' 문서를 참고한다.

 

 

끝.

Wraven...