본문 바로가기

개발84

!!! FAILED BINDER TRANSACTION !!! 에러 테스트를 해보는데 이런 에러가 뜬다.. !!! FAILED BINDER TRANSACTION !!! (parcel size = 1288)E Could not forward noteOp of 108 to com.google.android.gms/10098(network_location_provider) android.os.DeadObjectException: Transaction failed on small parcel; remote process probably died, but this could also be caused by running out of binder buffeat android.os.BinderProxy.transactNative(Native Method)at android.os... 2024. 5. 16.
map의 검색속도는 정말 array보다 빠를까? 코딩테스트를 하다가 특정값을 찾는 문제에서 array로 검색을 할 때 시간초과가 뜬다. map으로 바꿔서 하면 통과가 되길래 'map으 검색속도가 array보다 빠르다' 로 알고 있었다.근데... 왜 빠르지? map 안에 키로 찾는다면 결국 내부에서 키값을 비교하면서 순회하지 않나? 그렇다면 array랑 비슷할 거 같은데 왜 빠를까? 그래서 찾아보았다. 해쉬맵은Bucket이라는 구조를 가지고 키를 찾는다. Bucket에는 key로 생성한 Object와 해쉬코드를 쌍으로 들어있다. 해쉬코드에는 순서가 있고 그 순서를 기반으로 값을 검색하기 때문에 키를 빠르게 찾을 수 있다.해쉬코드키000이지금001이지은002이지동그리고 Entry라는 구조를 가지고 값을 찾게 된다. Entry는키값이지금가수이지은래퍼이지동기.. 2024. 5. 1.
최종 프로젝트 트러블슈팅 Trouble Shooting 지도 사용성 개선 문제 : 너무 많은 마커의 양 때문에 속도가 느려짐 맵을 축소했을 때 여러 개의 마커가 겹쳐서 시인성이 떨어짐과정: 클러스터링을 적용하고 화면 안에 마커만 나오게 하기로 결정 적용하고 나니 화면을 움직이고 난 뒤에 클러스터링하는 속도가 느림해결 : 데이터를 정렬, Coroutine 영역에 async, await으로 for문을 나눠서 처리하여 속도를 개선 (카메라 이동 시 처리 시간 약 800ms → 약 500ms)좌표 검색 방식 변경 문제 : 파이어스토어에 2개의 필드를 중첩하여 검색할 수 없음 과정 : 모두 불러온 뒤 비교하는 방법은 비용 문제 때문에 배제 Geohash 적용 (정확도가 높지 않아서 오차가 크다는 단점이 있음) 해결: 매 호출마다 Geoh.. 2024. 4. 10.
[네이버맵 api] pointf 좌표 마커의 위치 기준점을 바꾸는 pointf 속성이 있다. 비율로 나와있는데 0~1로 표시한다고 공식문서에 써있다. 사용 예시 marker.anchor = PointF(0.5f, 1f) 위처럼 쓰면 된다. 2024. 4. 10.
[코틀린] coroutine async await 사용 맵을 구현하면서 렉을 줄이기 위해 화면 안에 마커만 표시하기로 했다. 마커는 그냥 보여줬다 안보여줬다만 하면 되는데 문제는 클러스터러였다. 이걸 만들 당시에는 네이버맵에서 클러스터링을 지원하지 않았어서 tednavercluster라는 라이브러리를 썼었다. 지금은 클러스터링을 지원한다. 프로젝트 진행중에 생겨서 너무 빡쳤었다. 좀만 일찍 냈으면 라이브러리를 안써도 됐잖아 ㅠㅜ 아무튼 라이브러리에 데이터를 넣으면 표시해주는데 객체가 들어있는 배열형태로 넣어주다보니 처리하는데 시간이 꽤나 오래 걸렸다. 그래서 메인 스레드에서만 돌리기에는 작업량이 많아서 속도가 너무 느린 거 같아 코루틴을 활용하여 처리하기로 했다. 아래 코드가 코루틴을 사용한 부분이다. private fun updateCluster( nave.. 2024. 4. 8.
[안드로이드 코틀린] leakcanary(리크카나리)를 써보자 어제 profiler로 메모리 리크를 해결하기 위해 삽질을 했지만 실패했다.의심가던 전역변수를 모두 없앴는데도 리크가 일어나는 것이다.... 뭔가 내가 놓치고 있는게 있나해서 이거 뭐지하다가 튜터님한테 도움을 청하러 갔다. 리크카나리라는 라이브러리가 메모리 리크를 잡는데 좋다고 추천해주셨다. 맵 프래그먼트인거는 알겠는데 그래서 어디가 잘못됐는데?란 상황에 봉착했을 때, 조금 더 자세하게 문제의 원인을 특정해줄 수 있다고 한다. 리크 카나리를 써보자. 우선 빌드 그래들에 추가한다. dependencies { debugImplementation ("com.squareup.leakcanary:leakcanary-android:3.0-alpha-1") } 디버그임플레이션?은 뭐지 했는데 종류를 찾아보니 여러가지.. 2024. 3. 26.
[안드로이드 코틀린] profier를 사용하여 메모리 리크를 해결해보자 정확히 어디에서 나오는지는 모르겠지만 메모리 리크를 계속 일으키는 오류가 있어서 그동안 이런 기능이 있다~ 정도로 알고 있던 profiler를 사용해보았다. 사용법은 간단하다. 해결법이 어려울 뿐..... 먼저 앱을 실행한다 왼쪽에 속도계기판 같은 아이콘을 클릭한다. 그러면 위와 같은 화면이 뜬다. 위 화면은 이미 연결한 것이고 처음 키면 아무것도 없는 빈칸일텐데 + 아이콘을 클릭하고 기기를 선택하고 앱을 선택하면 된다. profiler화면 에서 memory 즉 파란색 그래프를 클릭하면 아래 화면이 뜰 것이다. 이 상태에서 메모리 리크가 의심되는 부분을 반복해서 실행해보자. 중간중간에 위에 화면에 보이는 쓰레기통 아이콘을 클릭해주자. 강제로 가비지콜렉션을 실행시키는 버튼인데 관계없는 메모리가 잡히는 걸 .. 2024. 3. 25.
[코틀린] 네이버지도 연동하기 원래 계획은 카카오지도 네이버지도 티맵 같은 여러 가지 지도앱 중에서 선택해서 목적지까지 자동으로 연결할 수 있게 해주려고 했었다. 그런데 각 앱마다 url이 달라서 하나를 돌려쓰는 것은 불가능했다. 그럼 각각의 앱마다 따로 써야하는데 시간이 안될 거 같아서 할 수 없었다. 결국 타협한 게 아래의 코드다.... 네이버지도만 설치되었는지 검사하고 네이버지도가 있다면 네이버 지도에서 목적지를 검색하고, 네이버 지도가 설치되지 않았다면 네이버의 빠른길찾기 서비스에다가 목적지를 넣어준다. private fun openMap( endLat: Double, endlon: Double, name: String? ) { //네이버지도앱으로 보내는 링크, 앱마다 다르므로 레퍼런스를 참고하자. val url = "nmap.. 2024. 3. 21.
[코틀린] intent 변수들 모음 정리 https://developer.android.com/reference/android/content/Intent.html Intent | Android Developers developer.android.com 위에는 안드로이드의 인텐트에 관한 레퍼런스이다. 인텐트(Intent)는 컴포넌트에 액션, 데이터 등을 전달하는 메시지 객체이다. 인텐트 객체의 구성 요소는 다음과 같다. 정리 Intent 객체의 구성 요소 ▶ Action(액션): 수행할 액션 이름(ACTION_DIAL) ▶ Data(데이터): 수행할 데이터의 URI(tel:) ▶ Category(카테고리): 수행할 액션에 대한 추가적인 정보 ▶ Type(타입): 수행할 인텐트 데이터의 명시적인 타입(MIME 타입)(video/mpeg) ▶ Com.. 2024. 3. 21.