[Android] Clip 속성 알아보기: ClipChildren, ClipToOutline, ClipToPadding
·
Android/UI
안드로이드에서 UI 작업을 하다 보면 View의 경계를 다뤄야 할 일들이 종종 있는데, 이때 Clip 네이밍이 들어간 속성 (ClipChildren, ClipToOutline, ClipToPadding) 들이 도움을 준다.ClipChildren 안드로이드에서 기본적으로 자식 View는 부모 View의 경계를 넘어갈 수 없다. 그래서 위의 xml 내용에서 TextView의 높이 100dp는 렌더링 되지 않고 잘리게 된다. ClipChildren은 자식 View가 자신의 경계를 벗어날 수 있도록 해준다. 기본값은 true로 적용을 위해 false값을 지정해야한다. 주의할점은 xml에서 부모 View가 아닌 최상단 View에 적용을 해줘야 한다.// xmlandroid:clipCh..
[Android] Worker Pool 패턴을 통한 작업의 효율/안정성 올리기
·
작업 일지
[Android] API의 배치 처리와 동시성 처리 : chunked vs semaphore기존 문자를 전송하는 로직은 chunked(10)를 통해 10개의 배치를 만들고 배치 내부는 비동기로 실행하되, 배치 내부의 작업이 모두 끝나면 다음 배치로 넘어가는 순차 방식으로 구현을 했다. // sendMmogyong.tistory.com지난번에 다량의 API 호출 건에 대해 리스트의 chunked와 코루틴의 semaphore를 비교해 보고 semaphore를 사용하려 했다. 하지만 semaphore를 사용했을 때 구조 상 처리할 데이터의 수량만큼 코루틴을 생성해야 하는 문제가 발목을 잡았는데, Worker Pool 패턴에 대해 알게 되었다.Worker Pool / Producer-Consumer / Wor..
[Android] ConnectivityManager로 데이터 절약 모드 감지하기
·
작업 일지
운영 중인 앱의 기능으로 오전 08:00가 되면 WorkManager를 통해 고객에게 문자를 전송하고 있다. 만약 문자 전송에 실패할 경우 에러 내역을 파일로 저장하고, 미전송 내역을 남겨 수동으로 전송할 수 있다. stackTrace: java.net.ConnectException: Failed to connect to ... 어느 날 '예약 문자 전송이 며칠 동안 안 돼서 수동으로 계속 보내고 있다.'는 내용으로 문의가 들어왔다. 에러 내역을 확인해 보니 위와 같은 문구를 확인할 수 있었다. 이 문구는 서버와의 연결에 실패했다는 내용으로 순간적으로 서버가 다운이 되었을까 생각이 들었지만 며칠 동안 동일 시간에 다운이 발생했을 거 같지는 않고, 다른 고객에게서 정상적으로 전송된 로그가 보였다. 특히나..
[Android] API의 배치 처리와 동시성 처리 : chunked vs semaphore
·
작업 일지
운영중인 앱에는 문자를 전송하는 기능이 있다. 문자를 전송하는 로직은 chunked()를 통해 배치를 만들고, 배치 내부는 비동기로 실행하되, 배치 내부의 작업이 모두 끝나면 다음 배치로 넘어가는 순차 방식으로 구현이 되어 있었다. // mmsList: Listval result = mmsList.chunked(10).flatMap { batch -> batch.map { job -> async { sendMms(job) } }.awaitAll()}위 방식은 단건씩 처리하는 것과 비교했을 때 효율을 높이고, 처리량을 조절함으로써 로컬과 서버에 부담을 주지 않는다는 장점이 있다. 하지만 현재 배치의 작업이 지연이 생겼을 때 다음 배치의 시작이 지연되어 처리 속도가 떨어질 수 있다.코..
[Android][Compose] kizitonwose/Calendar, 캘린더 라이브러리 사용기 #3
·
Android/UI
[Android] kizitonwose/Calendar, 캘린더 라이브러리 사용기 #2[Android] kizitonwose/Calendar 캘린더 라이브러리 사용기 #1GitHub - kizitonwose/Calendar: A highly customizable calendar view and compose library for Android and Kotlin Multiplatform.A highly customizable calendar view and compose library for Andogyong.tistory.comkizitonwose/Calendar, 캘린더 라이브러리 사용기 #2는 View 기반으로 작업을 하였다. 이번에는 Compose를 기반으로 사용해 봤다. Compose로 사용하..
[Android] kizitonwose/Calendar, 캘린더 라이브러리 사용기 #2
·
Android/UI
[Android] kizitonwose/Calendar 캘린더 라이브러리 사용기 #1GitHub - kizitonwose/Calendar: A highly customizable calendar view and compose library for Android and Kotlin Multiplatform.A highly customizable calendar view and compose library for Android and Kotlin Multiplatform. - kizitonwose/Calendargithub.com캘린ogyong.tistory.com지난번 kizitonwose/Calendar, 캘린더 라이브러리 사용기 #1에 이어서 몇 가지 기능을 추가해 보려고 한다.- CalendarVie..
[Android] kizitonwose/Calendar, 캘린더 라이브러리 사용기 #1
·
Android/UI
GitHub - kizitonwose/Calendar: A highly customizable calendar view and compose library for Android and Kotlin Multiplatform.A highly customizable calendar view and compose library for Android and Kotlin Multiplatform. - kizitonwose/Calendargithub.com캘린더에 날짜 이외에 다른 데이터를 함께 표시할 일이 생겨서 적합한 라이브러리를 찾던 중 kizitonwose의 Calendar 라이브러리를 발견했다. 해당 라이브러리는 캘린더를 개발자가 원하는 모습으로 꾸미는 것이 가능하다. 그리고 라이브러리를 사용하기 위한 샘플..
[Android] 배송 순서 최적화하기 with TSP
·
작업 일지
운영하고 있는 앱의 기능 중에서 사용자가 배송 순서를 설정할 수 있는데, 고객사에서 이 배송 순서를 현재 사용자 위치에서 가장 가까운 곳을 자동 설정하여 순서를 정렬해 줄 수는 없냐고 요청이 왔다. 이 내용을 들었을 때 현재 위치 좌표와 배송지의 좌표를 알고 있으니 두 좌표 간의 직선거리를 구하면 바로 될 거 같은데..? 라는 생각이 들었다. 예전에 아래 작업을 했던 게 도움이 된 것 같다.(※ 교통 상황같은 변수는 고려하지 않았다.) [Android] 내비게이션의 다음 경로 정보 구하기#1프로젝트에서 내비게이션을 사용하여 다음 경로까지의 거리 값과 회전 정보를 구해야하는 일이 생겼다. 개발 과정과 사용하게 된 API에 대해서 정리를 해본다. 사용 API ◾ 카카오내비 길찾기 SDKogyong.tisto..
[Android] Firebase Storage로 파일 관리
·
Android/Firebase
Android에서 Cloud Storage 시작하기 | Cloud Storage for Firebase이 페이지는 Cloud Translation API를 통해 번역되었습니다. 의견 보내기 Android에서 Cloud Storage 시작하기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Cloud Storagefirebase.google.comFirebase Cloud Storage는 문서, 사진 등의 콘텐츠를 저장할 수 있는 객체이다. 이미지를 업로드하고 다운로드할 수도 있고, 앱을 사용하는 중에 특정 시점의 로그가 필요한 경우 파일 형태로 만들어서 확인해 볼 수도 있다.Firebase 설정Cluad Storage를 설정하는 부분에서 allow read, write:..
[Android][Compose] MaterialCalendarView를 Compose에서 사용하기
·
작업 일지
기존 xml로 작업한 PWFB 프로젝트를 Compose로 변경하면서 기존에 구현했던 캘린더 UI를 어떻게 구현해야 할까 고민이 많았다. 캘린더는 MaterialCalendarView를 사용하고 있었는데, 다른 캘린더 라이브러리나 직접 구현하는 것보다는 기존 코드를 덜 수정하는 방향으로 진행하고 싶었다. Compose에는 AndroidView라는 컴포저블이 있는데, Compose에서 아직 사용할 수 없는 UI 요소를 사용하는 경우에 쓰인다. AndroidView 컴포저블을 사용해서 MaterialCalendarView를 사용할 수 있었다.AndroidView@Composable@UiComposablefun AndroidView( factory: (Context) -> T, modifier: M..
[Android][Compose] DataStore 사용해보기
·
Android/Data
DataStoreDataStore는 Jetpack 라이브러리로 Key-Value 또는 형식화된 객체를 프로토콜 버퍼와 함께 저장이 가능한 저장소다. 코틀린의 코루틴과 Flow를 사용하여 데이터를 비동기적이고 일관되며 트랜잭션 방식으로 저장한다. 기존에 SharedPreferences를 사용하고 있다면 DataStore로 마이그레이션 할 것을 구글에서 권장하고 있다.원본 링크 위 이미지를 보면 PreferencesDataStore와 ProtoDataStore가 있다. DataStore는 두 가지 구현을 제공한다.◾ Preferences DataStoreKey를 사용하여 데이터를 저장하고 접근한다. 미리 정의된 스키마가 필요하지 않으며 유형의 안정성도 제공하지 않는다.◾ Proto DataStore데이..
[Android] Flow와 StateFlow 사용해보기
·
Android/기타
LiveData와 Flow LiveData는 안드로이드 컴포넌트의 생명 주기와 결합되어 있어 UI 데이터를 관리하기 편하다는 장점 때문에 자주 사용한다. 하지만 아키텍처의 관점에서 볼 때 LiveData는 비동기 데이터 스트림을 처리하도록 설계되지 않았고, 안드로이드 프레임워크에 의존하기 때문에 도메인 계층과 데이터 계층에서 사용하기에는 적합하지 않다. 반면 Flow의 경우 순수 코틀린 언어로 되어있을 뿐만 아니라 비동기로 계산이 가능한 데이터 스트림이다. 이런 이유로 안드로이드에서는 데이터 계층에서 Flow를 사용한 다음 asLiveData()를 통해 ViewModel에서 LiveData로 변환하는 것을 추천하고 있다. (참고) StateFlow가 등장하면서 위와 같은 작업을 할 필요가 없어졌다. St..