이번에는 안드로이드(Android) 생명주기(LifeCycle)에 관하여 알아보겠습니다.
생명주기(LifeCycle)은 크게 Activity와 Fragment 각각 하여 총 2가지에 대해서 알아보겠습니다.
1. Activity
*알아두면 좋은점
1. 불투명한 새로운 액티비티가 최상단으로 올라와서 기존 액티비티가 완전히 보이지 않게 되면 onPause()에 이어 onStop()까지 호출된다는 점. 불투명 새로운 액티비티가 최상단으로 올라오면 기존 액티비티는 사용자와 더 이상 상호작용을 할 수 없다. 포커스도 새로운 액티비티에 맞춰진다. 그렇기 때문에 onPause()에 이어 onStop()까지 호출되는 것이다.
2. 하지만 새로운 액티비티가 백그라운드 속성값이 투명한 경우는 onPause()까지만 호출이 된다.
3. 새로운 액티비티가 아닌 다이얼로그를 띄워서 액티비티 최상단이 아닌상황에서는 onPause()도 호출되지 않는다. 즉 다이얼로그는 액티비티의 일부이기 때문이다. 즉 새로운 액티비티가 최상단으로 온 상황이 아니기때문에 아무런 함수가 호출되지 않는다.
- 다이얼로그를 제외한 액티비티가 최상단으로 올라오면 onPause()실행 / 최상단 액티비티가 밑에 액티비티를 완전히 보이지 않게 가릴경우 onStop()까지 실행
2. Fragment
onCreate()
onStart()
onResume()
onPause()
onStop()
onDestroy()
onRestart()
|
*onCreate: 프래그먼트를 생성할때 호출 / 프래그먼트가 일시정지 혹은 중단 후 재개되었을 때 유지하고 있어야 하는 것을 여기서 초기화 해야함
*onCreateView: 프래그먼트가 자신의 인터페이스를 처음 그리기 위해 호출. View를 반환해야함. 이 메서드는 프래그먼트 레이아웃 루트 이기 떄문에 UI를 제공하지 않는 경우에는 null을 반환
*onPause(): 사용자가 프래그먼트를 떠나면 첫번 째로 이 메서드를 호출. 사용자가 돌아오지 않을수도 있으므로 여기서 현재 사용자 세션을 넘어 지속되어야 하는 변경사항을 저장
*onStart(): 액티비티가 시작되는 상태에 들어가면 이 메서드를 호출. 사용자에게 프래그먼트가 보이게 되고, 이 메서드에서 UI를 관리하는 코드를 초기화 합니다. 이 메서드는 매우 빠르게 완료되고, 완료되면 Resumed(재개)상태로 들어가 onResume()메서드 호출
*onResume(): 이 메서드가 호출되면 사용자와 상호작용을 합니다. 어떤 이벤트가 발생하여 포커스가 떠날 때까지 이상태에 머무릅니다. 프로그램이 일시정지되어 onPause()를 호출하고 다시 재개되면 onResume() 메서드를 다시 호출. 재개 상태로 전활될때마다 필요한 초기화 작업들을 수행해야 함
*onStop(): 다른 액티비티가 완전히 화면을 가리게 되면 호출. 화면에 보이지 않을 때 실행할 필요가 없는 기능을 모두 정지할 수 있습니다. 앱이 사용자에게 보이지 않는 동안 앱은 필요하지 않은 리소스를 해제하거나 조정해야함.
*onDestory(): Activity또는 Fragment가 소멸되기 전에 호출. Activity를 완전히 닫거나 구성변경(기기회전 또는 멀티 윈도우 모드)시스템이 일시적으로 소멸시키는 경우에도 호출. onStop()에서 해제하지 않은 리소스가 있다면 여기서 리소스들을 해제해야함.
onAttach()
onCreate()
onCreateView()
onActivityCreated()
onStart()
onResume()
onPause()
onStop()
onDestroyView()
onDestroy()
onDetach()
Plus Alpha1-1. Activity의 onCreate의 기능을 Fragment에서는 두가지로 분리했습니다.
1-2. 그리고, Activity의 onDestroy의 기능도 Fragment에서는 두가지로 분리했습니다.
|
최초 생성 LifeCycle
- onAttatch() : Fragment가 Activity에 붙을 때 호출
- onCreate() : Activity에서의 oncreate()와 비슷, ui관련 작업X
- onCreateView() : Layout을 inflater하여 View 작업
- onActivityCreated() : Activity에서 Fragment를 모두 생성하고 난 다음 호출, 액티비티의 onCreate()에서 setContentView()한 다음이라고 생각 하면 쉽게 이해 될것 같다. 여기서 부터는 ui변경작업이 가능하다.
- onStart() Fragment가 화면에 표시될때 호출된다. 사용자의 Action과 상호 작용 할 수 없다.
- onResume()
Fragment가 화면에 완전히 그렸으며, 사용자의 Action과 상호 작용이 가능하다.
다른 Fragment가 add
- **onPause() :**Fragment가 사용자의 Action과 상호 작용을 중지
- **onStop() :**Fragment가 화면에서 더이상 보여지지 않게 되며, Fragment기능이 중지 되었을때 호출
- **onDestoryView() : **View 리소스를 해제 할수 있도록 호출, backstack을 사용 했다면 Fragment를 다시 돌아 갈때 onCreateView()가 호출
Replace or backward로 removed되는 경우
- **onDestory() :**Fragment상태를 완전히 종료 할 수 있도록 호출 한다.
- **onDetach() :**Fragment가 Activity와 연결이 완전히 끊기기 직전에 호출 된다.
글을 작성하면서 궁굼점!
왜 Activity보다 Fragment를 사용하는가?
1. Activity는 상대적으로 Fragment보다 무겁다.
2. Activity 내에서 Fragment는 상대적으로 가볍게 추가/제거 가능하다.
3. Activity Stack에 Activity를 쌓아두기보다 Fragment BackStack에서 Fragment를 관리하는게 메모리 관리에서도 효율도 챙기고 화면 전환시에 Activity보다 더 순조롭다.
4. 데이터 공유에도 용이
5. 재사용성의 증가
- View or Business Logic을 Fragment 단위로 분리 가능
- 아키텍쳐 원칙에서 가장 중요한 원칙인 관심사 분리를 통해 의존성을 분리하고 독립성을 키우게 된다.
6. 유연한 UI/UX 구현
결국 앱이 커지면 커질수록 각 View에서 처리하거나 해결해야한느 코드가 많이지는데 Activity로는 힘들거나 제약이 많으므로 Fragment를 사용하여 독립성을 높히고 의존성을 낮추는게 목적이 있지않나 싶다.
*참고자료
1. https://velog.io/@eun3673/application-fundamentals-lifecycle
'개발관련' 카테고리의 다른 글
[Github] 저장소에 있는 파일 삭제하는 방법 (0) | 2023.09.20 |
---|---|
[Android] 디바이스(Device) 무선 연결하는 방법 (0) | 2022.08.08 |
vi에디터 편집 단축키 (복사, 삭제) (0) | 2022.07.22 |
디자인패턴 MVC / MVP / MVVM (0) | 2021.11.18 |
데이터 바인딩 (DataBinding) 이란? (0) | 2021.11.18 |
LiveData에서 setValue() / postValue()의 차이점 (0) | 2021.11.18 |
오버로딩(Overloading) / 오버라이딩(Overriding) (0) | 2021.11.18 |
코루틴(coroutine)이란? (0) | 2021.11.18 |