본문 바로가기
Android/Concepts

Activity Lifecycle(수명주기)란?

by JuHy_ 2020. 4. 3.

Activity 수명주기란?

앱을 사용하다 보면 화면 위에 다른 화면이 생길수도 있고 일부만 가려질 수도 있는 등 여러 가지 상태 변화가 생긴다.

 

안드로이드에서는 이와 같은 상태에 따라

 

Activity가 화면에 보이고 실행될 경우 Running,

Activity가 아직 보이긴 하지만 다른 것이 위에서 일부를 가릴 경우 Paused,

Activity가 완전히 가려져 보이지 않을 경우 Stopped

 

로 나누어 Activity의 상태를 정의하고 있다.

 

그런데 앱을 만들다 보면 Activity가 현재 보이고 있는지 아닌지 판단이 필요할 때가 있다.

예를 들어서 게임을 하다가도 전화가 오면 게임이 일시정지되도록 해야 할 것이다.

이를 도와주기 위해 안드로이드는 Activity의 상태가 바뀔 때마다 자동으로 호출되는 메소드들을 만들어두었다.

 

Activity가 처음 생성될 때 onCreate(), onStart(), onResume()이 호출되며

다른 화면에 의해 일부가 가려질 경우 onPause(),

아예 보이지 않게 될 경우 onStop(),

Activity가 종료될 경우 onDestroy()가 호출되게 된다.

 

그리고 화면이 일부 가려졌다 나올 경우 onResume()부터 다시 호출되고,

완전히 가려졌다 보여질 경우 onRestart(), onStart() 순으로 다시 호출되게 된다.

 

실제로 잘 호출되는 지 보기 위해 각각의 메소드에 Toast를 띄워 확인해보자.

 

package com.juhy.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Toast.makeText(getApplicationContext(), "onCreate() called", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onStop() {
        super.onStop();
        Toast.makeText(getApplicationContext(), "onStop() called", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Toast.makeText(getApplicationContext(), "onRestart() called", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Toast.makeText(getApplicationContext(), "onDestroy() called", Toast.LENGTH_SHORT).show();
    }
}

각각의 메소드를 override해서 Toast 메세지를 띄우도록 작성해보았다.

 

처음 실행되면 onCreate()

홈버튼을 누르면 onStop()

다시 앱을 켜면 onRestart()

뒤로가기를 눌러 앱을 종료시키면 onDestroy()

 

이처럼 정상적으로 메소드들이 호출되는 것을 볼 수 있다.

 

이 외에도 다른 수명주기 메소드들이 있으므로 사용해보고 각각 상황에 맞는 메소드를 사용하면 된다.

 

 

Reference

[부스트코스]안드로이드 프로그래밍

https://www.edwith.org/boostcourse-android

'Android > Concepts' 카테고리의 다른 글

Broadcast Receiver를 이용한 SMS 수신  (3) 2020.04.04
Service의 기본적인 사용법  (0) 2020.04.03
Intent를 이용한 Activity 간 데이터 전달  (0) 2020.04.03
Intent의 Flag 사용법  (0) 2020.04.02
Intent란?  (0) 2020.03.31