Android - ActivityLifeCycle

MUNGI JO·2024년 2월 7일

Android 공부

목록 보기
5/8

Activity 생명주기란

액티비티의 상태 정보가 변화하는 것. 즉, 생성부터 -> 소멸까지의 전체적인 과정을 뜻한다.

생명 주기에 사용되는 메소드로
7가지의 메소드가 있다.

  1. onCreate() -
    액티비티가 처음 만들어졌을 때 호출되며 화면에 보이는 뷰들의 일반적인 상태를 설정한다.
    이전 상태가 저장되어 있는 경우 Bundle 객체를 사용하여 복원 가능하다. 이 다음엔 항상onStart() 메소드가 실행된다.

  2. onStart() -
    onCreate()가 실행되고 바로 다음 실행되는 함수로 화면에 보이기 바로 직전에 호출된다.
    화면상에 액티비티가 보이게 되면 onResume 함수가 호출되게 된다. 화면상에서 이 액티비티가 가려지는 경우 onStop()함수가 실행된다.

  3. onResume() -
    액티비티가 사용자와 상호작용하기 바로 전에 호출된다.

  4. onRestart() -
    액티비티가 중지된 이후에 호출되는 메소드 중 하나, 실행 되었던 액티비티가 onStop() 이후로
    다시 시작되기 바로 전에 호출된다. 이 메소드 이후 항상 onStart()함수가 실행된다.

  5. onPause() -
    또 다른 액티비티를 시작하려고 할 때 호출된다.
    저장되지 않은 데이터를 storage에 저장하거나 애니메이션 중인 작업을 중지하는 등의 기능을 수행한다.
    이 메소드가 리턴 되기 전에는 다음 액티비티가 시작될 수 없으므로 매우 빠른속도로 수행된 후 리턴되어야 한다.
    이 상태에서는 시스템은 액티비티를 강제 종료할 수 있다.

  6. onStop() -
    액티비티가 사용자 화면에 보이지 않는 경우 호출된다. (백그라운드, 다른 액티비티 등)
    액티비티가 소멸되거나 또 다른 액티비티가 화면을 가릴 때 호출된다.
    이 상태에서 시스템은 액티비티를 강제 종료할 수 있다.

  7. onDestoy() -
    액티비티가 소멸되어 없어지기 전 호출된다.
    이 메소드를 마지막으로 액티비티는 더 이상 호출받지 못한다. (액티비티가 받는 마지막 호출)
    액티비티가 앱에의해 종료(finish()) 혹은 시스템이 강제로 종료시키는 경우 호출 가능하다.
    위 2가지 경우를 구분하고 싶을 땐 isFinishing() 메소드를 사용한다.
    이 상태에서 시스템은 액티비티를 강제 종료할 수 있다.

몇 가지 예외를 제외 하고는 앱은 백그라운드에서 실행될 때 활동을 실행할 수 없다.
활동의 복잡성에 따라서 모든 수명주기 메소드는 구현할 필요는 없지만 사용자의 예상대로 앱이 동작하게 만드려면 필요한 수명주기 메소드를 구현할 수 있어야 할 것이다.

이제 동작을 확인해보겠다. 동작 확인을 위해 7개의 메소드를 Override 후 태그로 구분하여 확인할 수 있도록 했다.

	@Override
    protected void onStart() {
        super.onStart();
        Log.d("TAG", "onStart: is Successful");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d("TAG", "onStop: is Successful");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d("TAG", "onDestroy: is Successful");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d("TAG", "onPause: is Successful");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d("TAG", "onResume: is Successful");
    }
    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d("TAG", "onRestart: is Successful");
    }

그리고 logcat에서 package:mine tag로 tag만 구분하여 볼 수 있도록 하였다.

  1. 애뮬레이터를 실행한 직후 상태를 보면

    이 처럼 onCreate() -> onStart() -> onResume() 순서로 실행되는 것을 볼 수 있다.
  2. 애뮬레이터에서 앱을 백그라운드로 보내면

    아래처럼 onPause() -> onStop() 이 찍힌 걸 볼 수 있다.
  3. 앱을 백그라운드에서 다시 실행하게 되면

    아래처럼 onRestart() -> onStart() -> onResume() log가 나온걸 확인가능하다.
  4. 마지막으로 아예 앱을 닫아버리면
    onPause() -> onStop() -> onDetroy() 메소드가 순차적으로 호출되어 애플리케이션이 종료되는 모습을 확인할 수 있다.

이상으로 Activity 생명주기에 관해서 간략히 알아보았다.

profile
안녕하세요. 개발에 이제 막 뛰어든 신입 개발자 입니다.

0개의 댓글