안드로이드15 Compose에서 Naver Map 적용하기 - 2) PolyLine으로 내 경로 그리기 onLocationChange에서 내 위치를 list에 담도록 했습니다. Polyline을 그릴 때는 2개 이상의 좌표가 필요하기 때문에 size가 2 이상일 때, PolyLine을 그릴 수 있도록 했습니다. 주의할 점! list 객체의 값이 변경되지 않는다면 PolyLine을 다시 그리지 않습니다. 따라서, 위처럼 사용하시면 Polyline은 처음 그려진 상태로 존재합니다. 최종 코드 2024. 2. 25. Compose에서 Naver Map 적용하기 - 1) 위치 가져오기, 카메라 이동 https://github.com/fornewid/naver-map-compose/tree/main 초기 설정은 위 링크에서 확인하시면 됩니다! Composable 함수 내에서 NaverMap()을 선언하여 쉽게 Naver Map을 적용할 수 있습니다. NaverMap() 1. 위치 정보 가져오기 위 방식은 구글에서 제공하는 fusedLocationProfierClient를 이용하는 방식입니다. 이 방식 말고도 NaverMap을 통해 위치 정보를 쉽게 받아올 수 있습니다. NaverMap의 locationSource에 rememeberFusedLocationSource()를 넣어주고 onLocationChange 콜백 함수를 통해 내 위치를 나타내는 Location 객체를 얻을 수 있습니다. rememe.. 2024. 2. 25. Android의 효과적인 메모리 관리 안드로이드의 메모리 관리 방법에 대해 설명하려 합니다. 잘못된 부분이나 이해가지 않는 부분이 있다면 댓글 꼭 달아주세요! 안드로이드는 페이징 기법을 사용합니다. 페이징에 대해서는 설명이 잘 되어있는 글이 많기 때문에 페이징에 대한 설명은 넘어가겠습니다. 안드로이드는 사용 가능한 메모리가 있다면 메모리를 낭비하고 있다고 보고 사용 가능한 메모리를 최대한 사용하려고 합니다. 앱이 닫힌 후에도 앱을 메모리에 보관하여 사용자가 앱으로 빠르게 다시 전환할 수 있게 하는 등 사용 가능한 메모리를 최대한 사용하기 때문에 메모리 관리를 알고 올바르게 사용하는 것이 중요합니다. zRAM Android는 zRAM을 활용합니다. zRAM 이란? RAM의 파티션(램의 일부분)으로 스왑 공간으로 사용됩니다. 페이지를 zRAM에.. 2023. 11. 13. 3. 경로 최적화로 좌표 데이터 약 73% 감소 경로를 최적화하여 좌표 데이터 175개를 46개로 약 73% 감소시킨 경험과 고민했던 부분에 대해서 설명드리려 합니다. 문제 인식 러닝 앱에서 4~5초마다 현재 위치를 좌표 리스트에 추가해주고, 이 좌표 리스트로 경로를 그려주었습니다. 하지만, 위치 정보는 오차가 존재합니다. (확인한 결과 latitude는 현재 위치에서 약 0.0005 정도, longitude는 약 0.0002 정도 오차가 있는 걸로 확인 됩니다.) 오차가 존재하기 때문에 유저가 일직선으로 뛰어도 경로에는 일직선으로 보이지 않고 삐뚤빼둘하게 그려집니다. 왼쪽) 위치 정보 오차에 따른 문제, 오른쪽) 그리고 싶은 경로 위 사진에서 오른쪽의 빨간 선과 같이 직선으로 진행하는 경로에서 직선에서 시작하는 점과, 끝나는 점을 하나로 이어주고, .. 2023. 10. 17. 편하게 사용하고자 만든 Extensions Android 프로젝트 중, Clean Architecture, Flow를 사용하며 편리하게 사용하고자 만든 확장 함수들에 대해서 소개드리려고 합니다. 1. ResultType 확장 함수 sealed class ResultType { object Uninitialized : ResultType() object Loading : ResultType() object Empty : ResultType() data class Success(val data: T) : ResultType() data class Fail(val data: T) : ResultType() data class Error(val exception: Throwable) : ResultType() { val isNetworkError = e.. 2023. 10. 4. Android StateFlow DataBinding 중 Cannot find a setter 문제 Cannot find a setter for that accepts parameter type 'kotlinx.coroutines.flow.StateFlow' If a binding adapter provides the setter, check that the adapter is annotated correctly and that the parameter type matches. 브랜치를 옮기기 전에는 잘 되었으나 브랜치를 옮기고 나니 에러가 발생 Binding 타입 등에도 문제가 없지만 오류가 발생하여 여러가지를 시도해보았습니다 StateFlow가 정상적으로 동작하지 않는 판단에 Coroutine 버전을 올려주었더니 해결 완료 2023. 9. 29. Paging, 안드로이드에 맞는 커서 페이징 방식으로 구현하기 Paging, 안드로이드에 맞는 커서 페이징 방식으로 구현하기 안녕하세요 안드로이드 개발자가 되기 위해 노력하는 서경원입니다. 프로젝트를 진행하면서 고민했던 페이징 방식에 대해 설명드리려고 합니다. 이해가 안되는 내용이나 제가 잘못 적은 부분이 있다면 꼭 댓글 남겨주세요. Paging? 엉청나게 많은 데이터를 서버에서 한 번에 가져와 보여주려고 하면 무리가 있기 때문에 페이지 단위로 나누어 보여주는 것을 페이징이라고 합니다. 흔히 볼 수 있는 카페 게시글 형태가 페이징을 사용해서 보여주는 대표 예입니다. Offset 방식 카페 게시글 형태와 같은 경우 쓰는 방식입니다. 시작 점인 Offset과 시작 점으로부터 몇 개를 가져올 것인 지 Limit을 정해 데이터를 가져오는 방식입니다. Offset이 1, L.. 2023. 6. 6. 코틀린(Kotlin)과 자바(Java)의 차이점 코틀린(Kotlin)과 자바(Java)의 차이점 안녕하세요 안드로이드 개발자가 되기 위해 노력하는 서경원입니다. 코틀린과 자바의 차이점에 알게된 내용을 알려드리려고 합니다. 이해가 안되는 내용이나 제가 잘못 적은 부분이 있다면 꼭 댓글 남겨주세요. 코틀린과 자바에 대해 조금 아시는 분이라면 코틀린이 자바보다 문법이 간결하며 사용이 편해 생산성이 증대되고 Nullable 타입이 존재하기 때문에 널 안정성을 갖고 있다는 것을 알고 계실 것 입니다. 이 부분에 대해 더 자세히 알아보고 다른 장점에 대해서도 설명해드리려고 합니다. 생산성 1. 문법 Kotlin은 세미 콜론을 작성하지 않고 여러 함수들이 사용하기 편하게 작성되어 있습니다. String으로 타입을 변경할 때에도 변수 뒤에 .toString() 만 .. 2023. 6. 1. CoroutineDispatcher.Main.immediate 알아보기 Dispatcher.Main.immediate 알아보기 안녕하세요 안드로이드 개발자가 되기 위해 노력하는 서경원입니다. 코루틴 관리를 효과적으로 하고자 공부했던 내용을 공유해보려고 합니다. 코루틴에 대한 기본적인 내용과, Dispatchers.Main.immediate, 코루틴의 동작을 담고 있습니다. 여러분들은 viewModelScope의 내부를 들여다본 적이 있으신가요?? 아래는 viewModelScope의 내부 코드 입니다. public val ViewModel.viewModelScope: CoroutineScope get() { val scope: CoroutineScope? = this.getTag(JOB_KEY) if (scope != null) { return scope } return se.. 2023. 5. 31. 이전 1 2 다음