[Android LifeCycle] Activity LifeCycle에 대해 알아보자.

Delight Yoon·2022년 8월 26일
1

Android

목록 보기
1/17
post-custom-banner

📌 Android Activity LifeCycle

1. 개요

Google에 Android Activity LifeCycle에 대해 검색을 해보면 다음과 같은 이미지를 찾아볼 수 있다.
Activity LifeCycle은 영단어 뜻 그대로, 직역하면 Activity의 생명주기를 의미한다.

우리는 App을 개발하다보면, 기능 구현에 있어 여러 Activity, Fragment 간 전환이 되고,
사용자 관점에서 여러 화면이 바뀌는 것을 볼 수 있다.

이러한 과정에서, Activity 전환 간에 Android의 리소스 제한에 의해 모든 Activity들이 모두 살아남을 수 없다.
이 과정에 사용되는 메서드들을 알아보고, 언제 호출되는 지 알아보고 정리하는 시간을 가져보자.

2. 사용 메서드

  • onCreate()

    • Activity가 시작될 때 호출됨.
  • onStart()

    • Activity 화면이 보이기 전에 호출됨.
    • Broadcast Receiver은 여기서 등록한다.
  • onResume()

    • Activity 일부가 보일 때 호출됨.
    • 일부가 보일 때부터 전체가 보일 때까지 수행된다.
    • 가벼운 작업 위주로 수행하는 것이 좋다. 긴 작업을 수행한다면 버벅임이 발생할 수 있다.
  • onPause()

    • Activity가 일부는 보이지만 다른 Activity가 foreground로 나올 때 호출됨. (현재 Activity에서 다른 Activity로 화면이 전환될 때(+종료될 때도 포함) 현재 Activity의 onPause()가 호출된다고 볼 수 있다.)
    • 현재 Activity의 전체가 사라질 때까지 수행된다. 따라서 onPause() 또한 가벼운 작업 위주로 수행하는 것이 좋다. 긴 작업을 수행한다면 버벅임이 발생할 수 있다.
  • onStop()

    • 현재 Activity가 하나도 보이지 않게 될 때 호출됨.
    • Broadcast Receiver은 여기서 해제한다.
  • onDestroy()

    • Activity가 finish() 되거나 System에 의해 destroy될 때 호출된다.
      화면이 사라진 후, 시간이 오래지나거나 하면 그 Activity는 onDestroy()가 호출될 수 있다.

3. 실습 및 정리

위와 같은 Activity LifeCycle을 다루는 메서드들이 어떻게 동작하는 지 검증하기 위해 다음과 같은 코드로 Android Studio에서 실습을 진행해보았다.

class MainActivity : AppCompatActivity() {
    private val TAG : String = "로그"

    // onCreate() - 액티비티가 생성되었을 때
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        Log.d(TAG,"MainActivity - onCreate() called")
    }

    override fun onStart() {
        super.onStart()
        Log.d(TAG,"MainActivity - onStart() called")
    }

    override fun onResume() {
        super.onResume()
        Log.d(TAG,"MainActivity - onResume() called")
    }

    override fun onPause() {
        super.onPause()
        Log.d(TAG,"MainActivity - onPause() called")
    }

    override fun onStop() {
        super.onStop()
        Log.d(TAG,"MainActivity - onStop() called")
    }

    override fun onDestroy() {
        super.onDestroy()
        Log.d(TAG,"MainActivity - onDestroy() called")
    }
}

위와 같이 App이 실행이 되었고

다음과 같이 Log.d() 메서드에 의해 다음과 같이 Log 내용을 볼 수 있었다.
첫 실행을 하게 되면, 위 Activity LifeCycle에 사용되는 메서드들의 설명처럼

  1. 다음과 같이 Activity가 생성이 되면서 onCreate()가 호출이 되고
  2. 화면에 보여지기 전에 onStart()가 호출되며
  3. 일부 화면부터 전체 화면이 보여지기까지 onResume()이 호출됨을 알 수 있다.

홈 화면으로 이동 해보자 !

  • 다음과 같이 화면이 홈 화면으로 이동하면서 Activity의 일부부터 전체화면이 사라질 때까지 onPause()가 호출되며
  • 완전히 Activity가 하나도 보이지 않게 되었을 때 onStop()이 호출됨을 알 수 있다.

그렇다면 다시 App으로 돌아오면 어떻게 될까 ?

2022-08-26 17:49:14.224 12678-12678/com.example.androidlifecycle D/로그: MainActivity - onCreate() called
2022-08-26 17:49:14.226 12678-12678/com.example.androidlifecycle D/로그: MainActivity - onStart() called
2022-08-26 17:49:14.227 12678-12678/com.example.androidlifecycle D/로그: MainActivity - onResume() called
2022-08-26 17:49:27.030 12678-12678/com.example.androidlifecycle D/로그: MainActivity - onPause() called
2022-08-26 17:49:27.383 12678-12678/com.example.androidlifecycle D/로그: MainActivity - onStop() called
2022-08-26 17:49:29.111 12678-12678/com.example.androidlifecycle D/로그: MainActivity - onStart() called
2022-08-26 17:49:29.112 12678-12678/com.example.androidlifecycle D/로그: MainActivity - onResume() called
  1. App실행
  2. 홈화면 이동
  3. 다시 App으로 이동

이 과정들을 통해 다음과 같은 Log가 발생하게 된다. 어떻게 작동하는 것일까 ?

순서대로 살펴보자 !

2022-08-26 17:49:14.224 12678-12678/com.example.androidlifecycle D/로그: MainActivity - onCreate() called
2022-08-26 17:49:14.226 12678-12678/com.example.androidlifecycle D/로그: MainActivity - onStart() called
2022-08-26 17:49:14.227 12678-12678/com.example.androidlifecycle D/로그: MainActivity - onResume() called
  • 초기 Activity 화면이 생성되는 Log.

    1. Activity가 생성되며 onCreate() 호출
    2. Activity가 보여지기 전에 onStart()가 호출이 되고
    3. Activity가 일부 보이기 시작하는 시점부터 전체가 보이기까지 onResume()이 호출된다.

2022-08-26 17:49:27.030 12678-12678/com.example.androidlifecycle D/로그: MainActivity - onPause() called
2022-08-26 17:49:27.383 12678-12678/com.example.androidlifecycle D/로그: MainActivity - onStop() called
  • 홈 화면으로 이동하면서 발생한 Log.
    1. Activity가 일부 안 보이는 시점부터 화면이 모두 안보일 때까지 onPause() 가 수행이 된다.
    2. Activity가 하나도 안 보일 때 onStop()이 호출된다.

2022-08-26 17:49:29.111 12678-12678/com.example.androidlifecycle D/로그: MainActivity - onStart() called
2022-08-26 17:49:29.112 12678-12678/com.example.androidlifecycle D/로그: MainActivity - onResume() called
  • 홈 화면에서 App으로 다시 돌아왔을 때 발생하는 Log. App을 종료하지 않았을 때 상황이다.
    1. Activity가 보이기 이전에 onStart()를 호출한다.
    2. Activity가 일부 보이기 시작하기부터 전체가 보일 때까지 onResume()이 수행된다.

onDestroy()는 언제 호출될까 ?

2022-08-26 18:06:39.677 12858-12858/com.example.androidlifecycle D/로그: MainActivity - onStart() called
2022-08-26 18:06:39.678 12858-12858/com.example.androidlifecycle D/로그: MainActivity - onResume() called
2022-08-26 18:06:40.162 12858-12858/com.example.androidlifecycle D/로그: MainActivity - onPause() called
2022-08-26 18:06:40.878 12858-12858/com.example.androidlifecycle D/로그: MainActivity - onStop() called
2022-08-26 18:06:40.879 12858-12858/com.example.androidlifecycle D/로그: MainActivity - onDestroy() called

위 Log를 통해 알 수 있듯이 App이 오랜 시간동안 방치되서 자동 종료되거나,
수동으로 종료를 하게 될 경우 마지막으로, onDestroy()가 호출이 되며 System에 의해 Destroy되는 것이다.

중요 ❗ 화면이 회전된다면 어떻게 될까 ?

App이 처음으로 실행되었을 때 Log창이다.

2022-08-26 16:41:29.740 12526-12526/com.example.androidlifecycle D/로그: MainActivity - onCreate() called
2022-08-26 16:41:29.743 12526-12526/com.example.androidlifecycle D/로그: MainActivity - onStart() called
2022-08-26 16:41:29.743 12526-12526/com.example.androidlifecycle D/로그: MainActivity - onResume() called

이제 화면을 회전시키겠다.

2022-08-26 16:41:56.026 12526-12526/com.example.androidlifecycle D/로그: MainActivity - onPause() called
2022-08-26 16:41:56.030 12526-12526/com.example.androidlifecycle D/로그: MainActivity - onStop() called
2022-08-26 16:41:56.035 12526-12526/com.example.androidlifecycle D/로그: MainActivity - onDestroy() called

2022-08-26 16:41:56.136 12526-12526/com.example.androidlifecycle D/로그: MainActivity - onCreate() called
2022-08-26 16:41:56.140 12526-12526/com.example.androidlifecycle D/로그: MainActivity - onStart() called
2022-08-26 16:41:56.141 12526-12526/com.example.androidlifecycle D/로그: MainActivity - onResume() called

다음과 같이 Log창을 확인해보면,
Activity를 완전히 Destroy하고, 다시 생성하는 것을 확인할 수 있다.

📌 참조

profile
Yoon's Dev Blog
post-custom-banner

4개의 댓글

comment-user-thumbnail
2022년 8월 26일

오오 신기해요bb

1개의 답글
comment-user-thumbnail
2022년 8월 26일

보기 깔금해서 노무 좋아요~

1개의 답글