-
안드로이드 생명주기-Android LifeCycle안드로이드 2019. 4. 12. 19:59
안드로이드는 나름의 생명주기를 가지고 있는데 이를 LifeCycle이라고 부릅니다.
Task
액티비티의 생명주기를 알기전에 Task라는 것에 알아야 하는데 Task라고 하는 것은 사용자와 상호작용하여 특정작업을 실행하는 Activity의 집합이다.
Task는 스택의 형식을 띄는데 먼저 생성된 Activity의 순서대로 스택에 저장되게 된다.
아래의 그림은 Task로서 Activity의 실행 순서대로 스택에 쌓인 것을 볼 수 있습니다.
Task
Task는 다음과 같은 순서를 가지고 실행됩니다.
1. Activity A가 처음 실행되고 스택에 가장 먼저 쌓이게 됩니다.
2. Activty A에서 일련의 활동을 통해 Activity B가 불리게 되면 Activity A의 상태는 정지 상태가 되고 스택
의 맨 위에 Activity B가 자리를 차지하게 됩니다.
3. Activity B에서도 일련의 활동을 통해 Activity C가 불리고 마찬가지로 Activity B는 정지상태가 됩니다.
4. 이후 Activity C에서 일련의 활동이 정지되면(ex. back button 클릭) Activity C는 스택의 최상단에서
사라지게 되고 Activity B가 최상단에 위치하게됨으로서 Activity B가 사용자에게 보이게 됩니다.
LifeCycle
위와 같은 사이클만을 보면 Activity는 단순한 것처럼 보이지만 사실 Activity는 보다 복잡한 Cycle을 보이고 있습니다.
Activity는 다음과 같은 7개의 State를 가집니다.
- onCreate
- onStart
- onResume
- onPause
- onStop
- onRestart
- onDestroy
각각의 상태는 다음과 같습니다.
onCreate
Activity가 생성되어 시작될 때 처음 1번만 호출되는 메소드
리소스 초기화 및 데이터 바인딩 같은 초기 작업을 수행
onCreate의 savedInstanceState에는 정상적인 종료가 된 Activity의 경우에는 null값을 가지지만 비정상적인 종료시에는 비정상 종료전의 Activity정보가 저장되어있습니다.
onStart
Activity가 onCreate으로 인하여 생성된 이후 또는 정지된 상태에서 돌아올 때 호출
onResume
Activity가 새로 생성되거나 정지되었다가 다시 시작 되어서 화면이 focus를 얻을 경우 호출
일반적으로 onCreate, onStart이후 호출되나, 팝업또는 다이얼로그가 떴을 경우 Activity는 focus를 잃은 뒤 다시 focus를 획득할 시 onResume이 호출됩니다.
onPause
팝업 또는 다이얼로그에 Focus를 빼앗겼,고 Activity의 화면은 일부가 보이는 상태
onStop
Task의 최상단에 다른 Activity가 놓이면서, 화면에 더이상 보이지 않을 때 호출 되는 메소드
onStart에서 onStop까지 Visible LifeCycle 이라고 함
위의 경우 Activity C 가 onCreate되었을때 Activity B에 해당함
onRestart
onStop 상태를 가졌던 Activity가 다시 시작되어야 할때 즉, 보이지 않았던 Activity가 다시 보여질 때
이후 onStart부터 단계가 순차적으로 실행
위의 경우 Activity C가 호출되었던 상황에서 Back Button을 클릭하여 Activity B가 보여질때 Activity B에서 onRestart 호출
onDestroy
Activity가 파괴될때 호출되는 메소드
위의 테스트 예제 소스코드는 깃허브에 올려놓았습니다.
세계 최강을 꿈꾸는 안드로이드 Front-End 개발자입니다.
Github 주소: github.com/rkswlrbduf
이전 블로그 주소: blog.naver.com/rkswlrbduf => 블로그 이전중...
'안드로이드' 카테고리의 다른 글
CustomView - BottomNavigationView (0) 2019.04.14 아키텍처 패턴 - RAW, MVC, MVP (1) 2019.04.12 Android Q - RoleManager (0) 2019.04.12 Linked List VS Array List (0) 2019.04.12 RxKotlin + Retrofit2 + GitHub API (0) 2019.04.12 댓글