일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- NestedScrollView
- AsyncListDiffer
- flutter
- GetX
- 디자인 패턴
- AAC
- 데코레이터 패턴
- 리사이클러뷰풀
- Android
- Kotlin
- http발전과정
- DiffUtil
- 안드로이드
- 프로세스
- 상태관리
- 리사이클러뷰
- appcompatactivity
- 플로이드워셜
- 자이고트
- 뷰홀더
- 운영체제
- Dispatchers
- 물리 메모리
- http 역사
- apk 빌드 과정
- 내부 단편화
- 절대 주소
- appcompatacitivity
- viewModelScope
- recyclerview
- Today
- Total
목록Android (4)
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 클래스 자체가 ..

프로젝트의 홈 화면 입니다. 리사이클러뷰들이 모두 같은 뷰 타입의 아이템들을 가지고 있습니다.문제현재 홈 화면의 리사이클러뷰들은 같은 뷰 타입의 아이템을 가지고 있지만 각각 뷰풀을 소유하고 있습니다. 이 때문에 스크롤을 내릴수록 뷰를 재사용 하지않고 새로운 뷰를 인플레이트를 하게 됩니다.리사이클러뷰는 인플레이트를 통해 뷰를 생성하는데 이때 메인 스레드를 사용합니다. 만약 다른 애니메이션, 하단에 시리즈 아이템들이 많이 모여있는 카테고리들이 추가된다면 렌더링을 담당하는 메인 스레드에 비교적 많은 부담을 주게 됩니다.이는 스크롤 버벅거림이나 사용자 경험에 직접적인 연결이 되어있는 부분이기에 개선하고자 했습니다.리사이클러뷰 원리출처 : Microsoft1.저장리사이클러뷰는 스크롤을 할 때 캐시에 뷰(Scrap..

문제앱을 실행할 때마다 홈 화면의 모든 시리즈 데이터들을 매번 서버에 요청해야 하므로 로딩 시간이 소요됩니다. 그리고 모든 시리즈 데이터들에 썸네일 URL 추가하는 데이터 가공 작업을 매번 거쳐야 했습니다.이러한 과정들로 인해 로딩 시간이 길어진다면 이는 사용성에 불편함을 준다고 생각해 해당 문제를 개선하고자 했습니다.해결💡 어떻게 로딩 시간을 줄여야할까?가공이 완료된 데이터들은 로컬에 캐시하고 이후엔 새롭게 추가된 데이터들만 서버에게 요청합니다. 그 후 해당 데이터들만 가공하고 로컬에 추가하는 것이 매번 불필요하게 반복되는 작업을 피하기 때문에 효율적이라고 생각했습니다.첫 로딩 시 로컬에 데이터가 없을경우 시리즈 데이터들을 전부 초기화해주는 로직을 실행하고, 만약 로컬에 데이터가 존재할 경우 로딩이 ..