Android(Kotlin)

Android Activity 생명주기(Life Cycle)

----___<<<<< 2021. 8. 12. 19:23

 안드로이드 액티비티의 생명주기에 관한 내용입니다.

 

 대부분 한번정도는 들어봤지만, 계속 헷갈릴 때가 많으실테니 이렇게 정리해놓습니다.

 

 여기에서 내가 아니 이 것을 왜 알아야하냐? 혹은 이거 몰라도 안드로이드 앱 개발할 수 있는데? 라고 생각하시는 분들이 있을 수도 있으시겠지만, 아마 이런분들은 실제로 앱을 개발까지만 해보고, 런칭해서 운영까지 안해보셨을 가능성이 매우 높습니다.

 

 보통은 사용자가 중간에 앱을 강제 종료하기도 하고, 다른 앱 갔다가 돌아오기도 하는 경우가 많기 때문에, 이와 관련해서 액티비티 생명주기를 살펴보면서 알아보겠습니다.

 

 

https://developer.android.com/guide/components/activities/activity-lifecycle

 

 일단 7개의 메서드를 하나씩 알아보겠습니다.

 

 1. onCreate()

 2. onStart()

 3. onResume()

 4. onPause()

 5. onStop()

 6. onDestroy()

 7. onRestart()

 

 Activity launched 라고 액티비티가 시작되고 나서 어떻게 되는지 한번 자세히 알아보겠습니다.

 

 

 여기에서 onCreate() onStart() onResume()가 실행됩니다. 코드들을 통해서 한번 알아보겠습니다.

 

 간단하게 로그를 찍는 액티비티 파일을 만들고 실행을 해봤습니다.

 

 

 여기까지 하면 당연히 아래와 같이 순서대로 로그가 나오는 것을 볼 수 있습니다.

 

 자, 그렇다면 다음 항목을 알아보겠습니다.

 

 앱을 종료하지 않고, 홈 버튼을 누르면 어떻게될까를 보시면

 

 

 이 부분이 실행됩니다.

 

 onPause()

 onStop()

 

  

 

 자, 여기에서 새롭게 다시 앱으로 돌아오면 어떻게 될까를 한번 보겠습니다.

 

 빨간색으로 오른쪽으로 한바퀴 돌아갑니다.

 

 

 onRestart()

 onStart()

 onResume()

 

 의 순서대로 진행됩니다.

 

 자, 그렇다면 아래의 부분들은 어떻게 실행할 수 있는지 새롭게 제가 액티비티를 만들어서 알아보겠습니다.

 

 

 제가 아래와 같이 코드를 작성해서, MainActivity에서 SecondActivity로 이동시켜봤습니다.

 

  그러면 아래와 같이 나옵니다.

 

 onPause()에서 멈추고 onResume()으로 갈 것이라고 생각했는데, 여기에서 onStop()으로 빠집니다.

 

 왜 이렇게 되냐 하면, MainActivity가 화면에서 사라지면, onStop()이 실행되기 때문에 화면이 보이지 않게 되면, onStop()이 실행됩니다. 

 

 자, 그렇다면 화면에서 안 사라지게 하려면 어떻게 해야될까요?

 

 아래와 같이 SecondActivity부분을 투명으로 하는 테마를 만들어서 돌려보겠습니다.

 

 

 

 이렇게 투명으로 해서, MainActivity가 완전히 사라지지 않는 경우, onPause()만 호출되는 것을 볼 수 있습니다. 의도했던 대로 onStop()이 호출되지 않습니다.

 

 

  그리고 onDestroy()같은 경우는 그냥 앱을 꺼주면 당연히 호출됩니다.

 

 

 마지막으로 onStop() -> onCreate()로 가는 부분입니다.

 

 

 Apps with higher priorty need memory 라고 적혀있습니다. 우선순위가 있는 프로세스가 메모리를 필요로 하면 앱이 종료되고, 다시 유저가 Activity로 이동하면 onCreate()가 호출됩니다.

 

 여기에서 higher priorty가 있는 애가 뭘까? 생각해보면, 전화를 생각해보면 됩니다. 앱을 사용중에 전화가 걸려오면, 다른 것보다 전화가 우선시 뜨잖아요?

 

 여기까지 알아봤습니다.

 

 

 

'Android(Kotlin)' 카테고리의 다른 글

Kotlin 제네릭(Generic)  (1) 2021.08.16
Kotlin 반복문과, 이터레이터(Iterator)  (0) 2021.08.16
kotlin setOnLongClickListener  (0) 2021.08.04
Android Dagger Hilt  (0) 2021.07.29
Dagger - 7  (0) 2021.07.27