-
액티비티가 화면에 표시되고 종료될때까지 생명주기가 있다. MainActivity의 클래스를 보면 override fun onCreate 함수가 있는 것을 볼 수 있다. 하지만, 액티비티 생명주기에는 onCreate 말고도 더 많다.
액티비티 생명주기 구조도 // FirstActivity.kt val TAG = "FirstActivity_Lifecycle" // LogCat에서 확인할 TAG 내용 설정(원하는대로) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) ... } override fun onStart() { super.onStart() Log.i(TAG, "onStart()") } override fun onResume() { super.onResume() Log.i(TAG,"onResume()") } override fun onPause() { super.onPause() Log.i(TAG,"onPause()") } override fun onStop() { super.onStop() Log.i(TAG,"onStop()") // 음악이 재생되는것을 멈추게 한다는가.. // } override fun onRestart() { super.onRestart() Log.i(TAG,"onRestart()") } override fun onDestroy() { super.onDestroy() Log.i(TAG,"onDestory()") }
해당 코드를 MainActivity.kt 말고도 SecondActivity.kt 등 다른 코틀린 클래스에 넣으면 해당 액티비티에 들어갔을때 어떻게 돌아가는지 Logcat을 통해 확인할 수 있다!
직접 앱을 실행하고 처음 로그캣은 아래와 같다.
FirstActivity가 onCreate() → onStart() → onResume() 된다!
처음 앱 실행시 액티비티 실행 만약에, 버튼을 통해 두번째 액티비티로 넘어가게 되면(위의 코드를 SecondActivity.kt 에도 작성해야 확인가능하다) 아래와 같이 뜬다. 첫번째 액티비티는 Pause 상태로 넘어가고, 두번째 액티비티가 아까와 동일하게 onCreate() → onStart() → onResume() 상태로 된다. 이때, 두번재 액티비티가 onResume 까지 끝내면 첫번째 액티비티는 Pause에서 Stop 상태로 변경된다.
SecondActivity 로 전환시의 액티비티 주기 두번째 액티비티의 finish() 함수로 다시 첫번째 액티비티로 돌아오게 되면, 두번째 액티비티는 Pause 상태로 바뀐다. 이후, 첫번쨰 액티비티는 onCreate 과정 없이 (onCreate는 처음에만 작동하는 것 같다) onRestart -> onStart ->onResume 과정을 거치고 이후 두번째 액티비티는 Pause 에서 Stop으로 바뀐다. 또한, 이제는 아예 Destory()가 되는 것을 확인할 수 있다.(왜 Destory가 되는거지...?)
다시 FirstActivity 화면으로 전환시 stop에서 destroy 로 넘어가는 기준이 궁금해서 튜터님께 여쭤봤더니, finish() 함수를 통해 stop에서 destory로 넘어간다고 하셨다!(SecondActivity에서는 버튼이 눌렸을때 finish() 함수를 사용했다.
MainActivity에서 백키를 누르면 onPause() 상태에서 onStop() 으로 넘어간다.
하지만, 앱 자체를 완전히 꺼버리면 onDestroy()로 변한다!
이처럼 기본적으로 main.kt에는 onCreate()만 정의되어있지만, 사실상 훨씬 많다. 생명주기 패턴을 파악해서 Destroy() 에 메모리를 해제하는 코드 추가를 넣거나 onPause() 일때는 다른 작업 코드를 넣는 등 추가 작업을 응용할 수 있다.