study record

[안드로이드] 액티비티 생명주기(Activity LifeCycle) 본문

안드로이드

[안드로이드] 액티비티 생명주기(Activity LifeCycle)

asong 2021. 3. 16. 11:43

출처: 공식사이트

 

액티비티 생명주기(Activity LifeCycle)

액티비티(Activity)는 메모리에 들어가서 소멸되기까지의 <생명주기>를 가진다.

 

 

생명주기를 잘 이해하지 않고 앱을 만들다 보면 다음과 같은 문제들이 발생할 수 있다.

  • 사용자가 앱을 사용하는 도중 전화가 오거나 다른 앱으로 전환될 때 그에 맞는 콜백을 제대로 구현하지 않으면 앱이 비정상 종료될 수가 있다.
  • 사용자가 앱을 비활성화했을 때 폰 시스템의 리소스, 메모리가 낭비될 수 있다.
  • 사용자가 앱을 나갔다 들어올 때 진행중이던 상태나 작업 과정이 손실될 수 있다.
  • 화면이 가로-세로로 전환될 때 비정상 종료나 진행 상태가 손실될 수 있다.

 

액티비티 생명주기

액티비티는 6가지 +1 콜백으로 이루어진다.

onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy() + onRestart()

 

생명주기의 기본 흐름

1) 처음 Activity를 실행하면 (Activity launched)

2) onCreate() -> onStart() -> onResume() 콜백 메소드를 호출하게 되고

3) Activity가 실행중인 모습이 사용자에게 보여진다. (Activity running)

 

4) 다른 Activity를 실행하게 되면 현재 Activity는 중지되어야 하므로 onPause() 콜백 메소드가 호출된다.

5) 사용자가 다시 Activity로 돌아오게 되면 onResume()이 호출되고,

6) 아니면 Activity가 더 이상 보이지 않는다면 onStop()이 호출된다.

 

7) onStop()이 호출된 이후 다시 Activity를 실행하려고 하면

8) onRestart()를 호출하면서 다시 onStart() 부터 호출해나간다.

 

9) 다른 앱을 실행하게 되어 onPause()나 onStop() 상태에서 메모리 문제로 앱을을 중단시켰을 때는

10) 다시 앱을 실행할 때 onCreate()를 호출하게 된다.

 

11) onStop() 상태에서 사용자나 시스템이 앱을 아예 종료하게 되면

12) onDestroy()가 호출되면서 Activity가 완전히 종료되고

13) 완전히 종료 후 다시 실행할 때는 onCreate() 부터 시작한다.

 

콜백 메소드

1. onCreate()

  • 처음 액티비티가 생성될 때 호출되며 사용자 인터페이스 초기화에 사용됨.
  • 액티비티 내의 모든 요소들을 이 메소드 내에서 초기화 시킬 수 있다.
  • UI 레이아웃을 코드 상으로 동작하게 하기 위하여 setContentView()를 통해 정의해주는 메소드이다.

2. onStart()

  • 액티비티가 사용자(화면)에게 보여지기 바로 직전에 호출됨.

3. onResume()

  • 액티비티가 사용자와 상호작용하기 바로 전에 호출됨.
  • 이제 액티비티가 뜨고 동작하기 완전 직전에 실행

4. onPause()

  • 다른 액티비티가 보여질 때 호출됨.
  • 데이터 저장, 스레드 중지 등의 처리를 하기에 적당한 메소드
  • 사용자가 해당 액티비티를 다른 액티비티로 전환 시킬 때 보내는 첫 번째 신호
  • 만약 화면을 전환하기 전 저장되지 않은 데이터가 있다면 사용자가 이 액티비티로 돌아오지 않을 것을 우려하여 이 메소드가 호출될 때 저장할 수 있다.
  • 추가적으로 onPause()는 데이터를 저장하는데 주로 사용된다. 예를들어 게임을 하고있다가 중간에 전화가오거나 멈춰진 경우 전화가 끝나고 게임을 시작하면 게임이 원래 하던곳부터 계속 진행될수 있어야 할 것이다. 그런 경우 onPause()에서 현재의 데이터들을 sharedpreferences를 사용하여 저장해놓고 다시 앱을 진행했을때 복원 할 수 있게 onResume()에서 저장한 데이터들을 복원해 진행시킬 수 있다.

 

*액티비티를(현재화면) 다 가리지는 않는 예를들어 중간크기의 다이얼로그 같은 화면이 떴을때 onPause()까지 호출된다. 그리고 만약 해당 앱을 종료하거나 현재 액티비티(화면)이 다른 화면에 의해 완전히 가려져 안 보이게 되어 백그라운드에 있는 상태 등은  onStop()이나 onDestory()까지 차례로 호출된다. 

 

5. onStop()

  • 액티비티가 더이상 사용자에게 보여지지 않을 때 호출됨.
  • 메모리가 부족할 경우에는 onStop() 메소드가 호출되지 않을 수도 있음.
  • 다른 액티비티로 전환 시 스택에 다른 액티비티가 쌓여 가려지게 되면 호출된다.
  • 우리가 쓰던 액티비티가 완전히 뒤로 가서 호출되는 메소드이다. 그런데 OnStop인 상태일때 앱을 다시 킬수도 있는데 그런 경우 OnRestart()를 거쳐 onStart 생명주기로 다시 넘어간다. 참고로 onStop은 아직 액티비티가 소멸된 상태는 아니다.

6. onDestroy()

  • 액티비티가 소멸될 때 호출됨.
  • finish() 메소드가 호출되거나 시스템이 메모리 확보를 위해 액티비티를 제거할 때 호출됨.


 




 

참고 블로그:

kairo96.gitbooks.io/android/content/ch2.4.1.html

jhshjs.tistory.com/43

 

[Android Activity] 안드로이드 액티비티 생명 주기 (Life Cycle of Activity) 정리 및 이해

안드로이드 개발 공부 Andoird Activity 액티비티 생명(수명) 주기 정리 및 이해 Life Cycle of Activity 1. Activity 생명 주기란? 생명 주기? 안드로이드 폰을 써보면 누구나 알 수 있듯이 앱을 열면 앱에서 첫

jhshjs.tistory.com

 

youngest-programming.tistory.com/29

medium.com/@nsh235482/android-%EC%95%A1%ED%8B%B0%EB%B9%84%ED%8B%B0-%EC%83%9D%EB%AA%85%EC%A3%BC%EA%B8%B0-893c872c72ae

 

수명주기에 관한 공부는 더 해봐야 할 것 같다. 아무래도 중요한 부분이니만큼!

애플리케이션 메모리 관련한 부분도 더 찾아봐야겠다. 

공식디벨로퍼 사이트 정독을 더 하기..!