Compose에서 Flow를 수집할 때 collectAsStateWithLifecycle()을 많이 사용합니다. 화면의 Lifecycle에 맞춰 수집을 시작하고 중단해 주는 함수인데요. 그런데 이 함수를 사용했는데도 앱을 백그라운드로 보내면 API 요청이 계속 실행되는 경우가 있습니다. 수집을 멈춰 준다는데, 요청은 왜 멈추지 않을까요? 이번 글에서는 주기적으로 데이터를 가져오는 예제로 화면이 값을 받는 수명과 데이터를 만드는 작업의 수명을 나눠서 알아보려고 합니다.수집을 멈추면 요청도 멈출까? 우선 요청을 마친 뒤 1초를 기다렸다가 다음 숫자를 가져오는 간단한 Repository를 만들겠습니다. 실제 서버 대신 요청 횟수를 반환하는 실습용 코드입니다. class CounterRepository { ..
Google I/O 2025 'Add Predictive Back animations' 코드랩을 기반으로 작성되었습니다. What is predictive back?predictive back은 뒤로 가기 제스처를 진행하는 동안 이동할 화면을 미리 보여주는 기능입니다. 첨부된 자료처럼 손가락을 움직이는 정도에 따라 이전 화면이 서서히 나타나는 것을 볼 수 있습니다. 유저는 미리 보이는 화면을 보고 뒤로 가기를 완료할지 취소할지 판단할 수 있습니다. 앱 첫 화면에서는 홈 화면으로 나가게 된다는 것을 미리 알 수 있으니, 실수로 앱을 이탈하는 상황을 줄이는 데 유용할 것 같네요. How to add predictive back support코드랩에서는 먼저 홈 화면으로 돌아가는 predictive back..
Google I/O 2025 'Improve the user experience of an Android app' 코드랩을 기반으로 작성되었습니다. Make your app edge-to-edge on Android 15targetSdk를 35 이상으로 올리면 Android 15 이상 기기에서 edge-to-edge가 기본으로 적용됩니다. edge-to-edge는 앱 콘텐츠를 상태바와 시스템 내비게이션 바 뒤까지 확장해, 디스플레이 공간을 더 넓게 활용하는 방식입니다.Android 15에서는 테마의 windowOptOutEdgeToEdgeEnforcement로 적용을 일시적으로 해제할 수 있습니다. 다만 targetSdk 36 이상인 앱을 Android 16 이상 기기에서 실행하면 이 설정은 더 이상 적..
텍스트 하이퍼링크 기능을 Compose의 ClickableText로 구현하셨나요?2024년 9월 4일 출시된 Compose Foundation 1.7.0부터 텍스트 하이퍼링크를 쉽게 구현할 수 있는 LinkAnnotation을 안정적으로 사용할 수 있습니다. 같은 버전에서 ClickableText는 deprecated 되었고, Text 또는 BasicText에 LinkAnnotation이 담긴 AnnotatedString을 전달하는 방식이 권장됩니다. ClickableText는 이제 그만 LinkAnnotation을 알아보기 전에 ClickableText를 잠시 살펴보면 LinkAnnotation의 장점을 쉽게 알 수 있습니다. 하나의 문자열에 하이퍼링크가 두 개 이상 있다면, 클릭한 위치가 어느 링크에..
MessagingStyle 이번 글에서는 Android 알림 스타일 중 MessagingStyle에 이미지를 표시하는 방법을 알아보려고 합니다. MessagingStyle은 채팅처럼 대화형 데이터를 표시할 때 사용하는 알림 스타일입니다. 최근 회사에서 앱의 알림 스타일을 MessagingStyle로 변경하는 작업을 진행했는데요. 이미지를 표시하는 부분에서 어려움을 겪어서 이번 글에서 정리해 보려고 합니다. 기본 사용법 val person = Person.Builder() // (1) .setName("자비스") .setIcon(IconCompat.createWithBitmap(bitmap)) ... .build() ..
최근 'CLFigNotion' Figma 플러그인을 개발했습니다. 퇴근하고 게임만 하던 일상에서 벗어나, 하나의 목표를 가지고 개발하는 경험이 오랜만에 아주 설레고 좋았어요. 이 글을 쓰니 플러그인을 완성했던 늦은 밤이 떠오르네요. 회사 동료들에게 공유할 생각에 두근거리며 잠들었던 날이었죠. 오해가 없도록 미리 말씀드리면, 제가 이번에 개발한 플러그인은 이미 공개되고 많은 찬사를 받은 evan님의 FigNotion 플러그인의 아이디어를 매우 매우 참고해서 만든 프로젝트입니다. 왜? 개발을 결심한 계기저희 회사는 복잡한 기능 정책을 피그마와 노션에서 동시에 관리해야 하는 어려움이 있었습니다. 그러다 우연히 evan님의 FigNotion 플러그인을 알게 되었습니다. 짧은 기간 사용했지만 기획팀 동료분들이..
Enum은 클래스 내에 상수들을 열거해 관리하는 문법으로, 각 상수들은 객체처럼 property와 function을 가질 수 있는 특징이 있습니다. Stable replacement of the enum class values functionEnum 클래스의 열거된 상수들을 연속적으로 접근하고 싶을 때 values 함수를 자주 사용했었는데요. 그러다 최근 Kotlin 1.9.0 버전으로 업그레이드를 하니 values 대신 entries 속성을 사용하길 권장합니다. Enum의 entries는 Kotlin 1.8.20에서 Experimental 기능으로 처음 등장했고 Kotlin 1.9.0 버전에서 정식으로 Stable 되었습니다. entries 속성도 values와 동일하게 열거된 상수들을 연속적으로 접근..
Kotlin 1.9.0 버전으로 올리면 sealed class 자식으로 object 대신 data object를 사용하라고 권장합니다. 기존 object와 차이점은 무엇일까요? 어떤 장점이 있는 걸까요? 밑줄까지 치면서 권장하면서 말이에요Stable data objects for symmetry with data classeshttps://kotlinlang.org/docs/whatsnew19.html#stable-data-objects-for-symmetry-with-data-classes What's new in Kotlin 1.9.0 | Kotlin kotlinlang.org data object는 Kotlin 1.8.20에서 도입되었고, 1.9.0 버전부터 정식 기능(Stable)이 되었습니다. ..
2023년 7월에 구글은 Google Play 요구사항 정책에 추가되는 개발자 인증 요구사항을 공개했었습니다. 해당 정책은 개발자의 신원을 확인하고 일부 정보를 앱 사용자에게 공개하는 것으로 Google Play를 안전하고 신뢰할 수 있는 플랫폼으로 유지하기 위한 방법으로 도입된 것입니다. 정해진 기한까지 인증을 완료하지 않으면 개발자 프로필과 배포된 앱이 Google Play에서 삭제될 수 있다고 합니다. 굉장히 충격적인 소식이 아닐 수 없는데요. 다행인 점은 당시 기존 개발자 계정은 다양한 유형과 규모 등 인증하는 데 시간이 더 오래 걸릴 수 있다는 점을 고려해서 기한을 개발자가 직접 선택할 수 있도록 배려해 주었습니다. 당시에는 2024년 2월 29일까지 인증 마감 기한을 직접 선택할 수 있었고,..
당신은 Android 개발자로서 사진에 보이는 UI를 구현해야 합니다. UI 요구사항 중 왼쪽 아이콘에 클릭 액션이 있는데 클릭 영역을 뷰 사이즈보다 크게 잡아야 합니다. 어떻게 구현하면 좋을까요? 비교적 연령대가 높은 유저가 사용하는 서비스를 개발하다 보니 위 요구사항을 구현할 일이 종종 있었습니다. 그때마다 빈 레이아웃을 만들어서 해당 레이아웃에 클릭 리스너를 설정하는 방식을 사용했었는데요. 깨끗한 코드를 작성하겠다는 양심을 버려가며 레거시 코드를 마구마구 만드는 기분이었습니다.. 그러다 최근 위 요구사항에 알맞게 사용할 수 있는 touchDelegate라는 기능을 알게 되어서 소개해보려고 합니다.TouchDelegateTouchDelegate는 뷰가 가지고 있는 경계 너머로 터치 영역을 넓히고 싶을..
- Total
- Today
- Yesterday
- google io 2025
- Test
- Java
- WebView
- 안드로이드
- 기술질문
- git
- flow
- TEXT
- recyclerview
- AOS
- github
- Dependency
- Repository
- 면접
- 백준
- Coroutine
- View
- CI/CD
- ViewModel
- android
- Unit Test
- compose
- singleton
- MVP
- Gradle
- build
- Kotlin
- deep link
- exception
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
