📱 Android

[Android] Activity LifeCycle 🧐

콩드로이드 2022. 7. 3. 13:09

안녕하세요 

오늘은 Activity의 LifeCycle에 대해 알아보겠습니다 :)

수없이 봐온 LifeCycle이지만, 더 상세하게 알아둔다면 좀 더 좋은 구조를 가진 앱을 개발할 수 있을 것 같아요 💪


출처 : https://developer.android.com/guide/components/activities/activity-lifecycle?hl=ko

위의 사진 순서대로 알아보겠습니다 

 

1. onCreate()

최초로 1회만 실행되기 때문에 필수로 구현되어야 하는 부분이고, 초기 1회만 실행되어야 하는 부분을 넣어줍니다

주로 setContentView()를 onCreate에서 호출합니다 

 

2. onStart()

사용자에게 화면이 보여질 때 호출되고, 여러 번 호출이 가능합니다 

 

3. onResume()

사용자와 상호작용을 할 수 있을 때 호출되며, 여러 번 호출이 가능합니다 

즉, 포커스를 얻을 때 실행되는 부분이며 액티비티가 포커스를 잃기 전까지 이 상태에 있습니다

 

4. onPause()

액티비티가 화면에 보이고 있지만, 포커스를 잃었을 때의 상태를 의미합니다 (액티비티가 다시 돌아오거나, 화면에 보이지 않기 직전의 상태)

이 때, 포커스를 다시 얻어 액티비티가 사용자 이벤트를 처리할 수 있으면 onResume이 호출되고, 액티비티가 보이지 않게 되면 onStop이 호출됩니다 

onPause 동작시간은 길지 않으므로, 여기서 데이터 저장이나, DB 혹은 네트워크 호출 같은 무거운 작업을 하면 안됩니다 😭

 

5. onStop()

액티비티가 종료되지 않고 사용자에게 보이지 않을 때 호출되므로,  앱은 필요하지 않은 리소스를 해제하거나 조정합니다

ex) 애니메이션 종료 

만약 다시 보이게 된다면, onRestart() -> onStart() -> onResume()

그대로 종료되게 된다면, onDestroy()를 호출합니다

 

6. onDestroy()

액티비티가 종료되거나 화면 회전, 멀티모드와 같이 Activity가 소멸될 때 호출됩니다

 


화면 회전 

위에서 잠깐 언급했지만, 화면이 회전이 될 때 LifeCycle을 보면

onPause() -> onStop() -> onSaveInstanceState() -> onDesotry() 로 종료가 되고 별도의 작업을 거치지 않으면, 액티비에서 발생한 데이터가 모두 사라집니다

그리고,  onCreate() -> onRestoreInstanceState() -> onResume()으로 액티비티를 재생성합니다 

데이터를 유지하려면, 아래의 2가지 방법이 있는데 ViewModel은 이전 포스팅에 소개된 적이 있으므로, 1번만 다루겠습니다 

1. onSaveInstanceState() : Bundle에 데이터를 저장 

2. ViewModel()  2022.06.27 - [Android] - [Android] MVVM 구현하기

 

📌 onSaveInstanceState()

 override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        outState.putString("name", "test User")
 }

Bundle에 put Method를 사용해 데이터를 저장합니다

 

📌 onRestoreInstanceState()

override fun onRestoreInstanceState(savedInstanceState: Bundle) {
    super.onRestoreInstanceState(savedInstanceState)
    val data = saveInstanceState.getString("name")
}

Bundle에 get Method를 사용해 저장된 데이터를 가져옵니다 


이번 포스팅은 여기까지입니다!  각 라이프사이클에 맞게 구조를 잘 짜야겠어요🙇🏻‍♀️

궁금하신 점이나 의견이 있으시면 댓글 부탁드립니다 감사합니다 😊

'📱 Android' 카테고리의 다른 글

[Android] Fragment LifeCycle  (0) 2022.07.06
[Android] 4대 Component  (0) 2022.07.05
[Android] MVVM 구현하기  (0) 2022.06.27
[Android] Jetpack Architecture #1 DataBinding  (0) 2022.06.05
[Android] Pattern (MVC, MVP, MVVM)  (0) 2022.05.30