일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
31 |
- 리사이클러뷰풀
- flutter
- http 역사
- Kotlin
- 상태관리
- 물리 메모리
- 절대 주소
- viewModelScope
- appcompatacitivity
- Dispatchers
- 운영체제
- recyclerview
- Android
- appcompatactivity
- 뷰홀더
- GetX
- DiffUtil
- apk 빌드 과정
- 내부 단편화
- 데코레이터 패턴
- 플로이드워셜
- AsyncListDiffer
- 디자인 패턴
- http발전과정
- 리사이클러뷰
- AAC
- 자이고트
- NestedScrollView
- 안드로이드
- 프로세스
- Today
- Total
목록Android (23)
hong's android
viewModelScope는 viewmodel이 파괴되는 시점에 내부에서 실행했던 코루틴들을 모두 종료합니다.매번 viewmodelscope를 통해 코루틴을 실행하는 만큼 viewModelScope 내부 구조를 공부하며 동작에 대한 이해를 확실히 하려고합니다.먼저 viewModelScope의 내부입니다. public val ViewModel.viewModelScope: CoroutineScope get() = synchronized(VIEW_MODEL_SCOPE_LOCK) { getCloseable(VIEW_MODEL_SCOPE_KEY) ?: createViewModelScope().also { scope -> addCloseable(VIEW_MODEL_SCOPE_K..
Appcompatactivity특정 버전 이하 기기에서 뷰 하위 호환성을 유지합니다. 즉, 특정 버전 이하에서 지원하지 않는 뷰들을 지원하기 위함입니다. 🧐 어떻게 Appcompatactivity는 뷰 호환성을 유지할까?AppCompatActivity의 내부를 확인해보았습니다.먼저, AppCompatDelegate의 installViewFactory() 함수를 호출합니다.이를 통해 ViewFactory를 생성합니다. ViewFactory는 onCreateView()를 통해 appcompatview로 반환해주는 역할을 합니다.ViewFactory를 set할 때, 매개변수로 this(AppCompatDelegateImpl.kt)를 넘겨주는데 그 이유는 AppCompatDelegateImpl 클래스 자체가 ..

만약 앱이 아무런 메시지도 없이 죽어버리거나, 흰 화면이 나타난다면 사용자 경험이 낮아지고, 앱 이탈률도 높아질 것이라고 생각합니다. 어떻게 사용자에게 오류 메시지를 명확히 전달하고, 재시도를 유도할 수 있을까요? 그리고 개발자는 오류를 빠르게 디버깅, 수정해서 어떻게 안정적인 서비스를 운영할 수 있을지 생각하며 개선했던 경험을 작성해보려고 합니다. 먼저, 앱에서 발생할 수 있는 오류는 크게 세 가지로 수 있었습니다. 1. 시스템 논리 오류 이 오류는 프로그램의 내부 로직에서 발생하는 오류로, 예기치 않은 흐름에 의해 RunTimeException과 같은 예외가 발생할 때 주로 나타납니다. 이러한 오류는 사용자가 일반적으로 트리거하지 않지만, 발생 시 앱이 예상대로 동작하지 않아 기능이 중단될 수 있습..

ViewModel ViewModel 클래스는 비즈니스 로직 또는 화면 상태 홀더이다. 기존의 문제점들과 사용하는 이유 단순한 적은 데이터들은 Activity의 onSavedState() 메소드를 통해 번들 형태로 저장할 수 있다. 하지만 더 큰 데이터들은 해당 방법이 부적합하다. 또 뷰에서 비동기 호출을 하게 되면 액티비티의 생명주기에 따라 리소스가 낭비되는 경우가 있다. ViewModel의 이점 UI 상태를 유지할 수 있습니다. 비즈니스 로직에 대한 액세스 권한을 제공합니다. ViewModel의 생명주기 ViewModel의 생명주기는 Activity의 생명주기보다 길다. ViewModelStoreOwner의 생명주기를 따른다. 그렇기 때문에 액티비티 화면이 회전되어도 ViewModel의 데이터는 유지된..
CoroutineScope 란? 모든 coroutine은 scope 내에서 실행되어야 합니다. GlobalScope는 별도의 생명주기를 신경 쓰지 않고 앱의 시작 ~ 종료까지 유지되는 scope이다. aac workmanager와 함께 백그라운드에서 장기간 실행 되어야 하는 경우 적합하다. CoroutineScope는 어떤 목적(네트워크 통신, io 등)을 가지고 종료하기 위한 scope이다. GlobalScope와 CoroutineScope은 CoroutineScope 인터페이스를 상속받는다. public interface CoroutineScope { /** * Context of this scope. */ public val coroutineContext: CoroutineContext } Glob..

Room이란? 구조화된 데이터를 로컬에 캐시하고 탐색할 수 있도록 SQLite의 추상화 계층을 제공하는 라이브러리 *SQLite : "SQLite는 MyAQL이나 PostgreSQL과 같은 데이터베이스 관리 시스템이지만, 서버가 아니라 응응프로그램에 넣어 사용하는 비교적 가벼운 데이터베이스이다. 구성요소 데이터베이스 클래스 (Database): 데이터베이스를 보유하고 앱의 영구 데이터와의 기본 연결을 위한 기본 액세스 포인트 역할을 합니다. 데이터 항목 (Entities): 앱 데이터베이스의 테이블을 나타냅니다. 데이터 액세스 객체(DAO): 앱이 데이터베이스의 데이터를 쿼리, 업데이트, 삽입, 삭제하는 데 사용할 수 있는 메서드를 제공합니다. Room 사용시 이점 구조화된 데이터를 sql문을 이용해서 ..