가이드라인이 정해져있어 편리한 ORM Room에 비해 SQLite만 사용할 때는 가이드라인이 확실치 않아 고민되는 부분이 많다.
cursor와 Database의 close시점 그리고 MainUIThread에서의 SQL 사용 등 아직 개념이 확실히 정립되지 않아 이 글을 수정해가면서 공부한 내용을 천천히 정리해 보고자 한다.
1. 꼭 백그라운드에서 작업을 해야하나?
이 부분에 대해서 많이 고민했고 여러 글들을 찾아봤다. 결론은 "처리할 데이터의 개수에 따라 다르다."이다.
SQL을 UI Thread에서 수행하면 수행되는 시간 동안 UI Thread가 멈춰서 사용자에게 앱 전체가 멈춘 느낌을 준다. 사용자가 앱이 느려짐을 느끼는 시간은 100~200ms라고 한다. 그리고 일정 시간이 경과하면 ANR(애플리케이션 응답 없음)이 발생하고 앱이 강제 종료된다. 따라서 100ms 미만으로 SQL 쿼리를 처리할 수 있는 양의 데이터라면 메인 Thread에서 처리해도 괜찮을 것이다. 데이터 전체가 100개인 DB에서는 백그라운드이건 MainThread 이건 관계없다는 것이다. 여러 글에도 처리할 데이터량이 적다면 괜찮지만 우선적으로 백그라운드에서 작업하는 것을 추천하는 의견이 많았다. 참고로 Room에서는 메인 Thread에서 쿼리 작업을 수행하면 오류를 뿜어낸다.
참고 : https://developer.android.com/training/articles/perf-anr?hl=ko
2. select에서 Cursor의 사용법
데이터베이스에서 데이터를 가지고 오자 할때는 select Query와 더불어 cursor에 레코드(행)들을 담아온다.
val itemIds = mutableListOf<Long>()
with(cursor) {
while (moveToNext()) {
val itemId = getLong(getColumnIndexOrThrow(BaseColumns._ID))
itemIds.add(itemId)
}
}
cursor.close()
출처 : https://developer.android.com/training/data-storage/sqlite?hl=ko#ReadDbRow
본 글은 계속 수정될 예정입니다.
'안드로이드' 카테고리의 다른 글
[안드로이드] Recyclerview, ListAdapter 순서 변경 문제 (0) | 2023.04.23 |
---|---|
[안드로이드] 서비스 startCommand에 관하여 (0) | 2022.01.17 |
[안드로이드] 애니메이션 Interpolator 에 관하여 (0) | 2021.12.17 |
[안드로이드] Android studio Arctic Fox 버전 이후 gradle allprojects 추가방법 (0) | 2021.11.10 |