반응형
이 포스팅에 앞서 MVVM 아키텍처와 AAC에 대해 알아보았다. 이제는 AAC의 5가지 라이브러리를 Android developer 문서를 통해 알아볼 예정이다. Lifecycles에 대한 내용이 잘 이해가 되지 않는다면 MVVM이 어떤 것인지 먼저 알아보는 것이 좋을 것 같다!
Lifecycles
생명주기 모니터링을 돕는 라이브러리
androidx.lifecycle 패키지는 수명 주기 인식 구성요소(Activity나 Fragment의 현재 수명 주기 상태를 기반으로 동작을 자동 조정할 수 있는 구성요소)를 빌드할 수 있는 클래스 및 인터페이스를 제공합니다.
- Lifecycle : Lifecycle을 나타내는 객체
- Lifecycle Owner : Life 객체에 activity, fragment의 상태를 제공
- Lifecycle Observer : 상태 변화에 대한 이벤트를 받음
Lifecycles 클래스
Activity나 Fragment와 같은 컴포넌트의 수명 주기 상태 관련 정보를 포함하여 다른 객체가 이 상태를 관찰할 수 있게 하는 클래스Event와 State, 이 2개의 메인 Enumerations을 사용하여 수명 주기 상태를 추적함
- Event : 프레임워크 및 Lifecycle 클래스에서 전달되는 수명 주기 이벤트. Activity와 Fragment의 콜백 이벤트에 매핑됨.
- State : Lifecycle 객체가 추적한 컴포넌트의 현재 상태
State는 아래 그래프의 노드, Event는 노드 사이의 간선
클래스는 메서드에 어노테이션을 추가함으로써 컴포넌트들의 수명주기 상태를 모니터링할 수 있다.
Lifecycle 클래스의 addObserver() 메서드를 호출하고 Observer 객체를 넘김으로써 observer를 추가할 수 있다.
class MyObserver : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun connectListener() {
...
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
fun disconnectListener() {
...
}
}
myLifecycleOwner.getLifecycle().addObserver(MyObserver())
LifecycleOwner 클래스
클래스에 Lifecycle이 있음을 나타내는 단일 메서드(=getLifecycle( )) 인터페이스
- LifecycleOwner는 Fragment 및 AppCompatActity와 같은 개별 클래스에서 Lifecycle의 소유권을 추출하고, 함께 작동하는 컴포넌트를 작성할 수 있게 함
- LifecyleObserver를 구현하는 구성요소들은 LifecycleOwner를 구현하는 컴포넌트와 원활하게 작동하는데, LifecycleObserver가 관찰을 위해 등록하는 Lifecycle를 LifecycleOwner가 제공할 수 있기 때문
Lifecycle-aware 컴포넌트의 권장사항
- UI 컨트롤러(Activity와 Fragment)를 가능한 가볍게 유지할 것!자체 데이터를 확보하기 보단 ViewModel을 이용하여 데이터를 확보하고, LiveData 객체를 관찰하여 Viwe를 업데이트할 것
- 데이터 기반 UI를 작성할 것!데이터 변경에 따라 View를 업데이트하거나 사용자 작업을 다시 ViewModel에 알리는 것은 UI 컨트롤러의 책임
- ViewModel 클래스에 데이터 로직을 배치할 것!ViewModel은 UI 컨트롤러와 앱 나머지 부분의 커넥터 역할임. 하지만 데이터를 가져오는 것은 ViewModel의 책임이 아니다. 대신 ViewModel은 적절한 구성요소를 초훌하여 데이터를 가져오고 결과를 다시 UI 컨트롤러에 제공해야 함
- Data binding을 사용하여 View와 UI 컨트롤러 사이의 인터페이스를 깔끔하게 유지할 것!
- UI가 복잡하다면 UI 수정을 처리할 presenter 클래스를 만드는 것이 좋음 (MVP)
- ViewModel에서 View나 Activity Context를 참조하지 말 것 (GC가 제대로 처리하지 못해 메모리 누수가 발생할 수 있음)
- Kotlin Coroutine을 사용하여 장기 실행 작업 및 비동기적으로 실행될 수 있는 기타 작업을 관리할 것
Lifecycle-aware 컴포넌트의 사용 사례
- 위치 기반 어플리케이션 : 대략적인 위치(coarse location)와 세분화된 위치(fine-grained location) 업데이트 간 전환. Lifecycle-aware 컴포넌트와 LiveData를 통해 사용자 위치가 변경될 때 자동으로 UI를 업데이트
- Video 버퍼링 중지와 시작 : Lifecycle-aware 컴포넌트를 사용하면 Video 버퍼링을 최대한 빨리 시작하지만, 앱이 완전히 시작될 때까지 재생을 연기함. 또한 앱이 제거될 때 버퍼링을 종료할 수 있음
- Network 연결 시작과 중지 : 앱이 forground에 있는 동안 네트워크 데이터를 실시간으로 업데이트할 수 있고, background로 이동하면 실시간 업데이트를 자동으로 중지할 수 있음
- Animated drawable의 일지중지와 재시작 : 앱이 background에 있는 동안 중지처리하고, forground에 이동하고 재시작할 수 있음
reference>
반응형
'ANDROID > Android Jetpack' 카테고리의 다른 글
[Android/Jetpack] AAC - Data Binding (0) | 2021.08.11 |
---|---|
[Android/Jetpack] AAC - Room (0) | 2021.08.03 |
[Android/Jetpack] AAC - ViewModel (0) | 2021.07.27 |
[Android/Jetpack] AAC - LiveData (0) | 2021.07.21 |
[Android/Jetpack] MVVM 아키텍처와 AAC (0) | 2021.07.19 |
[Android] MVC, MVP 아키텍처 (0) | 2021.07.12 |
[Android/Jetpack] 앱 아키텍처 가이드(App Architecture Guide) (0) | 2021.07.09 |
[Android/Jetpack] Jetpack이란? (0) | 2021.07.09 |
댓글