티스토리 뷰
이번 포스팅에서는 Room 에 LiveData 를 적용할 것이다.
기존 project 에 LiveData 를 적용하면 어떤 장점이 있는지 확인해보자.
참고로, 지난 포스팅 내용은 하단과 같다.
- UI, DB 생성, CRUD, column 추가, DB 확인
[Android/Database] - SQLite 에서 ROOM 까지 (2) - UI 구성
[Android/Database] - SQLite 에서 ROOM 까지 (3) - SQLiteOpenHelper
[Android/Database] - SQLite 에서 ROOM 까지 (4) - SQLite 를 이용한 CRUD
[Android/Database] - SQLite 에서 ROOM 까지 (5) - SQLite 로 생성된 기존 DB 에 column 추가하기
[Android/Database] - SQLite 에서 ROOM 까지 (6) - DB 확인하기
- ROOM, ROOM 의 3구성요소 추가, Repository, ViewModel 추가, migation 설정, CRUD
[Android/Database] - SQLite 에서 ROOM 까지 (7) - ROOM 이란?
[Android/Database] - SQLite 에서 ROOM 까지 (8) - ROOM 의 3 구성요소(Database, Entity, Dao) 추가하기
[Android/Database] - SQLite 에서 ROOM 까지 (10) - SQLite 에서 ROOM 으로 migration 설정하기
[Android/Database] - SQLite 에서 ROOM 까지 (11) - ROOM 을 이용한 CRUD
LiveData
LiveData 는 데이터를 저장하고 변화를 관찰 할 수 있는 Observable data holder 클래스다.
일반적인 Observable 과는 다르게 LiveData 는 안드로이드 생명주기(LifeCycle) 를 알고 있다.
즉, 안드로이드 컴포넌트 (액티비티나, 프레그먼트, 서비스 등)의 생명주기(Lifecycle)를 알고있어 LiveData 가 활성상태(start, resume) 일때만 데이터를 업데이트(Update) 한다.
LiveData 는 Observer 패턴을 따른다.
LiveData 가 가지고 있는 데이터에 어떠한 변화가 일어날 경우, LiveData 는 등록된 Observer 객체에 변화를 알려주고, Observer 의 onChanged() 메소드를 실행한다.
UI 객체는 LiveData 에 옵저버를 등록할 수 있으며 데이터가 변경될 때 UI 를 변경할 수 있다.
LiveData 의 이점
◼ UI 와 데이터 상태의 일치 보장
LiveData 는 생명주기에 따라 데이터가 변경되면 Observer 객체에 변경을 알린다.
앱 데이터가 변경될 때마다 UI 를 업데이트하는 대신, 변경이 발생할 때마다 Observer 가 UI 를 업데이트할 수 있다.
◼ 메모리 누수(Memory leak) 없음
Observer 는 Lifecycle 객체에 결합되어 있어 연결된 생명 주기가 끝나면 자동으로 메모리를 해제한다.
◼ 중지된 활동으로 인한 비정상 종료 없음
Observer 의 생명 주기가 비활성 상태(예: 활동이 백 스택에 있음) 이면 Observer 는 어떤 LiveData 이벤트도 수신하지 않는다.
◼ 수명 주기를 더 이상 수동으로 처리하지 않음
UI 구성요소는 관련 데이터를 관찰하기만 할 뿐 관찰을 중지하거나 다시 시작하지 않는다.
LiveData 는 관찰하는 동안 관련 생명 주기 상태의 변경을 인식하므로 이 모든 것을 자동으로 관리한다.
◼ 최신 데이터 유지
생명 주기가 비활성화되면 다시 활성화될 때 최신 데이터를 수신한다.
예를 들어 백그라운드에 있었던 활동은 포그라운드로 돌아온 직후 최신 데이터를 받는다.
◼ 적절한 구성 변경
구성 변경(예: 기기 회전)으로 인해 활동이나 프래그먼트가 다시 생성되면 사용할 수 있는 최신 정보를 즉시 수신한다.
◼ 리소스 공유
LiveData 를 상속하여 LiveData 클래스를 구현할 수 있고 싱글톤 패턴을 이용하여 시스템 서비스를 래핑하여 앱 어디에서나 자원을 공유 할 수 있다.
Before & After
기존 프로젝트에서 LiveData 를 적용하면 어떻게 바뀌는지 알아보자.
◼ Dependencies
기존 프로젝트에는 ViewModel 때문에 이미 추가했지만 LiveData 를 사용하려면 하단과 같이 dependency를 추가해야 한다.
◼ List -> LiveData
- Before : List<phstudententity>
- After : LiveData<List<phstudententity>>
◼ Update
- Before : Interface 를 사용해 DB query 후 UI 업데이트
-After : LiveData 사용시 observer 를 통해 전달되면 UI 업데이트
◼ Insert
- Before : 삽입 후 UI update 호출해야함
- After : 삽입이 완료되면 알아서(Observer 가 onChanged 를 호출함) UI update 됨.
Source code
◼ Before
https://github.com/parkho79/FromSQLiteToRoom_3
◼ After
https://github.com/parkho79/FromSQLiteToRoom_4
'Android > Database' 카테고리의 다른 글
SQLite 에서 ROOM 까지 (11) - ROOM 을 이용한 CRUD (0) | 2020.10.05 |
---|---|
SQLite 에서 ROOM 까지 (10) - SQLite 에서 ROOM 으로 migration 설정하기 (0) | 2020.09.21 |
SQLite 에서 ROOM 까지 (9) - Architecture Components 구성을 위한 Repository, ViewModel 추가하기 (0) | 2020.09.15 |
SQLite 에서 ROOM 까지 (8) - ROOM 의 3 구성요소(Database, Entity, Dao) 추가하기 (0) | 2020.09.09 |
SQLite 에서 ROOM 까지 (7) - ROOM 이란? (0) | 2020.09.01 |
- Total
- Today
- Yesterday
- android flag activity
- WEMIX
- registerForContextMenu
- 리워드앱
- BroadcastReceiver
- Intent
- 안드로이드 서비스
- Android Service
- StringUtils
- mPANDO
- android task
- onCreateContextMenu
- 안드로이드 인텐트
- android intent
- StartService
- 무료채굴
- p2e
- M2E
- 앱테크 추천
- task 생성
- bindservice
- RoomDatabase
- 리워드 어플
- 채굴앱
- 무료 채굴
- android activity flag
- onContextItemSelected
- task
- 앱테크
- notifyDataSetChanged
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |