목록Android (57)
Hanbit the Developer
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b04cSa/btsDhA4vKr2/EIJcsLtfFPSwOKlmFTH9fK/img.gif)
오버랩 이슈 페이드 인, 페이드 아웃이 진행될 때 새로 나타나는 뷰가 잠시 아래로 밀려있는 이슈가 발생하였다. 기존 코드 AnimatedVisibility(visible = uiState is TodoUiState.Success) { TodoScreenSuccess() } AnimatedVisibility(visible = uiState is TodoUiState.Empty) { TodoScreenEmpty() } 문제 원인 페이드 인과 페이드 아웃이 아래처럼 진행되는데, t0
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/rwktA/btsBlcjd4xk/hfm1fP7qYWgbgzmeoShl0k/img.png)
배경 개발을 하다보면 아래와 같은 코드를 자주 쓰게 된다. viewModelScope.launch(Dispatchers.IO) { // ... } viewModelScope는 어떻게 구현되어 있는가? 이 글에서는 viewModelScope를 시작으로 ViewModel의 전체 구현을 알아보고자 한다. viewModelScope viewModelScope는 아래처럼 구현되어 있다. // ViewModel.kt /** * [CoroutineScope] tied to this [ViewModel]. * This scope will be canceled when ViewModel will be cleared, i.e [ViewModel.onCleared] is called * * This scope is boun..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/FCIQM/btsAF2vjAdO/vWhX35yb7sjjF0rKxOTq3K/img.png)
User can dismiss notification by default Android 13(API level 33)부터 사용자는 foreground service 관련 알림을 제거할 수 있다. 기존에는 foreground service가 꺼질 때까지 제거할 수 없었다. 만약 non-dismissable하게 하고 싶다면, Notification.Builder로 알림을 생성할 때 setOngoing(true) 메소드를 사용하라. Services that show a notification immediately 아래 조건 중 하나를 충족하면 서비스 시작 시 시스템이 알림을 띄운다: 서비스가 action button을 포함한 알림과 연관될 때 서비스가 mediaPlayback, mediaProjection, ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/6emzM/btsAFvjc7js/QTmTwhCRmbtY7TiJ8oKod1/img.png)
What is Services? An application component that can perform long-running operations in the background. 예시: 네트워크 트랜잭션 제어, 음악 재생, 파일 입출력 수행, content provider와 상호작용 No UI 컴포넌트가 서비스에 바인드되어 상호작용할 수 있음 IPC 수행 가능 메인쓰레드에서 작동함(ANR 주의할 것) Types of Services Foreground 사용자가 알아차릴 수 있는 작업을 수행한다. 예시: 음악 플레이어 Notification을 표시해야만 한다.(사용자가 알아차릴 수 있도록) WorkManager API는 작업을 유연하게 스케줄링하고 작업을 foreground service로 돌릴 수 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bVPXiA/btszojk6tDS/c5vravWmu1N3lnVXDbUKU0/img.png)
서론 Activity, Fragment에서 Lifecycle이 어떻게 동작하는지 top-down으로 알아본다. Activity, Fragment가 어떻게 Lifecycle을 갖는가? ComponentActivity, Fragment는 LifecycleOwner라는 인터페이스를 구현한다. // ComponentActivity.java /** * Base class for activities that enables composition of higher level components. * * Rather than all functionality being built directly into this class, only the minimal set of * lower level building blocks ..
배경 Kotlin의 Coroutines에서 예외 처리를 하는 방식은 다양합니다. 오늘은 세 가지 예외 처리 방식의 장단점을 비교하고자 합니다. try-catch block viewModelScope.launch { try { val data = getServiceListUseCase() // Handle data } catch (e: Exception) { // Handle exception } } - 장점: 직관적이고 간단합니다. 세부적인 예외 유형에 따른 처리가 쉽습니다. - 단점: 반복적인 사용 시 코드 중복이 발생할 수 있습니다. 예를 들어, 여러 곳에서 네트워크 요청을 수행하는데 동일한 예외 처리 로직을 적용하는 경우, 코드의 중복이 발생합니다. CoroutineExceptionHandler v..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dWDPwO/btr2PyTKASe/VhBnG7EmryKDeLKY5fKY80/img.png)
KTS and version catalog make our gradle file clear. And KTS's mainly used in modern android projects like Sunflower, nowinandroid. I used them to clear my gradle files and to practice Kotlin DSL. Let's see below images. The left one is my old gradle file, and the right one is the new one. This article covers how I migrated gradle files using KTS, version catalog. Migrating to KTS 1. Rename gradl..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ccQIBJ/btr0qXKrkWf/eutJMG9DYG79BbdMYNvDRK/img.png)
Using test rules can help you write more efficient and effective tests, and can save you time by automating common testing tasks. And @Rule annotation is used to declare the test rule in JUnit. But in sunflower created by Google Android, @get:Rule is used instead of @Rule. In Kotlin, properties are compiled to getter and setter in Java, rather than public fields. So we need to apply the @Rule an..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/17mbN/btrZbO7xRk1/LTTw2eMClL1D6OW4MlpJe1/img.gif)
I released FiveStarsView which is a custom view for a touchable star rating view with customizable stars. With FiveStarsView, you can draw a custom view with touchable five stars, apply Two-way data binding to the view, and modify the image, color, size, and the like of those stars. And I'd like to talk about the contents below: How the custom view's implemented Two-way data binding with custom ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bCk60e/btrSyiGUh5u/EdzJbq1B93CqWx6MR4Co00/img.png)
이번 포스트에서는 Google Android팀의 nowinandroid가 어떻게 구성되어 있는지 살펴봅니다. 특히 Clean Architecture, Multi Module이 어떻게 적용되어 있는지를 중심으로 살펴보겠습니다. Why nowinandroid? 시작하기에 앞서, nowinandroid(이하 'nia')는 Android팀에서 가장 활발하게 개발하고 있는 인기 있는 프로젝트입니다. Google에서 Compose의 도입을 매우 권장하고 있고 이를 크게 밀어주고 있는 추세인데, nia는 이러한 Compose로만 개발한 앱입니다. 최신 아키텍처도 잘 담고 있어, 이 리포지토리만 공부해도 Clean Architecture, Multi Module, Compose라는 세 마리 토끼를 다 잡을 수 있다고 ..