[Android] 안드로이드 액티비티 생명주기

Android/Android · 2020. 6. 14. 16:41
반응형

 이번 포스트에선 안드로이드 액티비티 생명주기에 대해 작성하겠습니다. 다음은 Android Developer에서 제공하는 사진입니다.

안드로이드 생명주기 루틴

 

 이것은 안드로이드 앱이 대략적으로 어떻게 돌아가는지에 대해 나타낸 사진입니다. 사실 이것만 보면 잘 이해가 가지 않을 것입니다. 이제 메소드를 하나하나 설명하겠습니다.

 

 

액티비티 실행
onCreate() 객체 생성, 초기화 액티비티가 시작될 때
onStart() 화면이 보일 때 처리 액티비티가 보이기 직전
onResume() 액티비티가 완전히 보일 때
액티비티 실행 중
onPause() 화면이 안 보일 때 처리 액티비티가 포커스를 잃었을 때
onStop() 액티비티가 완전히 보이지 않을 때
onDestroy() 메모리 해제 액티비티가 종료되기 직전
액티비티 소멸

 

앱이 최초 실행되면 onCreate -> onStart() -> onResume() 순으로 메소드가 호출합니다. 종료 시는 onPause() -> onStop() -> onDestroy() 순으로 처리가 됩니다. 

 

 1. onCreate() : 앱이 시작할 때 제일 먼저 수행하는 메소드입니다. 일반적으로 변수나 객체 초기화 시에 사용되는 메소드 입니다.

 

 2. onStart() : onCreate() 작업 다음으로 호출되며, 이 시점부터 사용자가 화면에 표시할 액티비티를 볼 수 있습니다.

 

 3. onResume() : 사용자와 액티비티가 서로 상효 작용할 수 있는 foreground 상태가 되면 이 메소드를 호출하고 사용자에게 보입니다.

 

 

--------------------------------------------------------액티비티 전환, 종료-----------------------------------------------------

 

 여기서부터는 액티비티가 다른 액티비티 호출, 시스템에 의한 종료, 화면 끄기 등에 의해 호출되는 메소드들입니다.

 

 4. onPause() : 액티비티 종료 혹은 다른 액티비티가 호출될 때 onPause()메소드가 호출됩니다.(액티비티가 포커스를 다른 곳으로 맞추다.) 데이터 저장 혹은 스레드 처리를 할 때 사용하기 적합한 메소드라고 볼 수 있습니다.(애니메이션 작업 중지)

 

 5. onStop() : 액티비티가 사용자 눈에 보이지 않을 때 호출됩니다. 화면 끄기, 앱 종료 등의 경우에서 호출됩니다. 다만 시스템이 강제 종료한 앱은 onStop()은 호출되지 않을 수도 있습니다. 또한, 시스템으로 인해 강제 종료 후 재시작 시 onRestart()로 호출되는 것이 아닌, onCreate()부터 다시 시작합니다.

 

 6. onDestroy() : 액티비티가 사라질 때(앱이 종료될 때) 호출됩니다. finish()메소드 호출 혹은 시스템이 메모리 확보를 하기 위해 앱을 강제 종료 시 호출되는 메소드입니다.

 

 

 위에 있는 그림을 세분화하여 조금 더 자세히 살펴보겠습니다.

 

 

 

 1. 일시 정지 및 재개

 

 

일시 정지 및 재개

 

 

 액티비티는 여러 가지 요인으로 일시 정지와 재개를 반복합니다. 액티비티가 포커스를 다른 것으로 맞춘다면 액티비티는 일시정지(onPause())상태가 됩니다. 다시 포커스를 액티비티에 맞추면 onResume()이 호출되면서 액티비티는 실행상태로 되돌아가게 됩니다. 여기서 헷갈리는 부분이 다이얼로그 호출 시입니다. 일반적인 다이얼로그(ex. AlertDialog)를 호출한다고 생명주기가 변하지 않습니다. 이 onPause()와 onResume() 상태의 저장과 복원을 적절히 잘 이용해야 합니다.

 

 

 

 2. 정지 및 재실행

 

정지 및 재실행

 

 홈 키를 누르거나 앱 사용 도중 전화가 오는 등 앱이 완전히 화면에서 사라졌다가 다시 실행되는 경우입니다. 화면에서 액티비티가 완전히 사라지면 onPause() -> onStop()이 차례대로 호출되며, onRestart() -> onStart() -> onResume()으로 호출됩니다. onRestart()는 재실행될 때 호출되는 콜백 메소드입니다. onStop()과 onRestart()에서 적절한 처리를 해줘야 합니다.

 

 

 

 3. 강제 종료 및 실행

 

강제 종료 및 실행

 

 일시 정지 상태에서 오랫동안 사용되지 않은 앱은 강제 종료될 수 있습니다. 그러나 시스템이 강제 종료를 하면 onDestroy()는 호출되지 않습니다. 강제 종료된 앱은 onCreate() -> onStart() -> onResume()로 앱이 재시작합니다. 앱이 강제 종료될 때 onStop()메소드를 적절히 사용해야 합니다.

 

 여기까지 안드로이드 액티비티 생명주기에 대해 알아봤습니다. 내 앱이 대략적으로 어떻게 실행되는지는 액티비티에 Log를 찍어보면 나옵니다.

 

 

감사합니다.

 

 

반응형