Google에 Android Activity LifeCycle
에 대해 검색을 해보면 다음과 같은 이미지를 찾아볼 수 있다.
Activity LifeCycle은 영단어 뜻 그대로, 직역하면 Activity의 생명주기를 의미한다.
우리는 App을 개발하다보면, 기능 구현에 있어 여러 Activity, Fragment 간 전환이 되고,
사용자 관점에서 여러 화면이 바뀌는 것을 볼 수 있다.
이러한 과정에서, Activity 전환 간에 Android의 리소스 제한에 의해 모든 Activity들이 모두 살아남을 수 없다.
이 과정에 사용되는 메서드
들을 알아보고, 언제 호출되는 지
알아보고 정리하는 시간을 가져보자.
onCreate()
onStart()
Broadcast Receiver
은 여기서 등록한다.onResume()
onPause()
onPause()
가 호출된다고 볼 수 있다.)onPause()
또한 가벼운 작업 위주로 수행하는 것이 좋다. 긴 작업을 수행한다면 버벅임이 발생할 수 있다.onStop()
Broadcast Receiver
은 여기서 해제한다.onDestroy()
finish()
되거나 System에 의해 destroy될 때 호출된다.onDestroy()
가 호출될 수 있다.위와 같은 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
에 사용되는 메서드들의 설명처럼
onCreate()
가 호출이 되고onStart()
가 호출되며onResume()
이 호출됨을 알 수 있다.onPause()
가 호출되며onStop()
이 호출됨을 알 수 있다. 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
이 과정들을 통해 다음과 같은 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.
onCreate()
호출onStart()
가 호출이 되고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
onPause()
가 수행이 된다.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
onStart()
를 호출한다.onResume()
이 수행된다.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하고, 다시 생성하는 것을 확인할 수 있다.
오오 신기해요bb