일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- android
- GitHub
- 코드포스
- AWS
- Kotlin
- 암호학
- Compose
- Gradle
- 코루틴
- 프로그래머스
- textfield
- Codeforces
- MyVoca
- 백준
- Hilt
- pandas
- Coroutines
- MiTweet
- Python
- androidStudio
- 쿠링
- Rxjava
- livedata
- activity
- TEST
- boj
- ProGuard
- relay
- Coroutine
- architecture
- Today
- Total
목록Primary (163)
이동식 저장소
대량의 데이터를 유저에게 보이는 부분만 조금씩 가져오고 싶을 때 Jetpack Paging 라이브러리를 사용할 수 있다. 아키텍쳐 Paging 라이브러리는 ``DataStore`` → ``Repository`` → ``ViewModel`` → ``UI``로 이어지는 안드로이드 권장 아키텍쳐에서 바로 사용할 수 있다. 이 문단에서는 개념만 소개하고, 아래에서 실제로 구현해 보겠다. Repository layer Repository layer에서는 ``PagingSource``를 정의해야 한다. ``PagingSource``는 하나의 source로부터 데이터를 로드하는 작업을 정의한다. 예를 들어 로컬 DB나 원격 서버에서 데이터를 받아오는 작업을 정의할 수 있다. 데이터를 받아오는 로직이 계층 구조로 되어..
Fragment도 Activity와 유사한 lifecycle을 갖는다. ``Lifecycle.State`` enum에서 모든 상태 값을 확인할 수 있다. ``INITIALIZED`` ``CREATED`` ``STARTED`` ``RESUMED`` ``DESTROYED`` 그런데 fragment의 view는 fragment와 별도의 lifecycle을 갖는다. 뷰가 보이지 않지만 fragment 자체는 살아있을 수 있기 때문이다. View binding을 ``onCreate``가 아닌 ``onCreateView``에서 초기화하는 이유이기도 하다. 최근 본 코드 중에 fragment에서 ``LiveData``를 observe하는 코드가 있었는데, 생명주기를 ``lifecycleOwner``로 설정하니 메모리..
현재 Canary 5 버전인 Giraffe의 신기능을 정리해 보자. UI 대격변 Android Studio에서도 IntelliJ의 새로운 UI를 사용할 수 있다. 오.. 이게 뭐지? VSCode 스타일의 깔끔한 UI이다. Settings - Apperaance & Behavior에서 적용할 수 있다. 자세한 내용은 IntelliJ 공식 문서를 참고하자. 그런데 아직은 버그가 적지 않은 듯하다. Gradle 파일에서 Sync Project 툴바가 뜨지 않는 등 사용하는 데 불편함이 있을 것 같아 나중에 안정화되면 사용해 보자. 더 많은 Compose Animation Preview Compose의 애니메이션 API 중 기존에는 ``updateTransition``과 ``AnimatedVisibility``..
몇몇 클래스는 사용하기 전에 초기화해야 하는 경우가 있다. 예를 들어 로그 라이브러리인 Timber는 앱을 시작한 후 최대한 빨리 초기화해야 한다. ``Application`` 클래스 안에서 초기화할 수도 있지만, startup 라이브러리를 사용하면 앱이 시작될 때 자동으로 초기화할 수 있다. 설치 ``build.gradle`` 파일에 다음 의존성을 추가하자. dependencies { implementation("androidx.startup:startup-runtime:1.1.1") } Startup 라이브러리의 장점 이전에는 클래스를 ``ContentProvider``에서 초기화하는 경우도 있었지만, ``ContentProvider`` 자체가 만들기 비싼 데다가 결정적으로 클래스의 초기화 순서를 지..
Compose로 혼자 뚝딱뚝딱 하던 도중 composable이 어떠한 방식으로든 터치되고 있는지 확인해야 하는 경우가 생겼다. 어떤 방식으로든 focus를 받고 있을 때 아이콘을 보여주고 싶었기 때문이다. 이 기능을 구현하려면 일단 Compose에서의 터치 이벤트를 공부해야 한다. 일단 터치 이벤트가 발생했는지 판단하는 ``isFocused`` 변수를 선언하자. 이 값이 true이면 터치 이벤트가 발생한 것이므로 아이콘을 보여줘야 한다. @Composable fun RotatingIndicatorGradient() { var isFocused by rememberSaveable { mutableStateOf(false) } RotatingGradient { AnimatedVisibility( visibl..