ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 액티비티 생명주기
    카테고리 없음 2024. 3. 25. 14:53

    액티비티가 화면에 표시되고 종료될때까지 생명주기가 있다. 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() 일때는 다른 작업 코드를 넣는 등 추가 작업을 응용할 수 있다.

Designed by Tistory.