본문 바로가기

Android/Troubleshooting

(14)
ROOM DB 마이그레이션 오류 개선 앱 업데이트를 진행하면 참 기상천외한 버그들을 많이 보는 것 같다. 특히 DB 관련 로직을 수정하면 재현조차 되지 않는 버그들을 흔히 볼 수 있다.. data class에 컬럼을 추가해서 업데이트를 했는데 마이그레이션 코드에서 이미 존재하는 컬럼에 대한 중복 추가 오류로 Fatal Exception: android.database.sqlite.SQLiteException duplicate column name:~~~ 요런게 계속 발생했다. 비록 전체 사용자의 10%도 안되는 장애지만, 일단 장애가 발생하니 묵인할 수는 없다. 아니 근데 없던 걸 추가했는데 중복 이름이 생기다니 게다가 내 테스트 환경에서는 재현조차 안된다니 이걸 어떻게 해결할지 머리 터지게 고민했다 아무 문제없이 업데이트 적용이된 나머지 ..
BuildConfig가 생성 또는 import가 안될 때 브르므글 이거 때문에 서칭하고 어쩌고 하다가 40분 날려먹었다. Ktor 적용을 위해 테스트 삼아 Sample 코드를 작성하는데.. Debug 환경에서 로깅을 하려는데 계속 BuildConfig가 생성도 안되고 Import도 안되었다. import 패키지명.BuildConfig 원래 이렇게 하면 되야하는데 어림도 없지ㅋㅋ 무적의 Clean Project -> Rebuild Project도 어림없도 File -> Invalidate Cache를 해도 안된다. 아래 링크를 참조해서 buildFeatures { buildConfig true } 이렇게 해도 안됨 ㅎ https://stackoverflow.com/questions/20706451/buildconfig-not-getting-created-corr..
Haversine 공식으로 두 지점간의 거리를 구하기 이번에 신규 기능을 추가하기로 했다. 대충 배달어플에서 라이더가 목적지에 근접하게되면 판매자나 소비자에게 곧 도착한다는 알림을 전송하는 기능을 만들어 보자는 내용 앱 네비에서 어차피 경로를 표시해 주니깐 거기서 몇 미터 남았을때 호출할까.. 아니면 일정 범위를 설정한 뒤, 해당 범위 내에 접근하면 무조건 호출할까 고민 좀 했다. 어느 길로 가든 일단 인접하면 연락이 가게하는게 맞다고 생각되어 후자로 선택 그럼 해당 범위에 들어갔는지 계산하는 함수가 필요한데.. 여기서는 헤버사인(Haversine) 공식을 사용하는게 좋다. 지구상의 두 지점간의 거리를 계산할때 사용되는 공식이며, 일반적으로 위도(latitude)와 경도(longitude)를 사용해서 두 지점간의 최단 거리(대원의 호)를 계산한다. 수식은 ..
코루틴 작업 분리 이전의 DB 작업의 연장선이다. 나는 api 통신 후, 해당 결과값을 바탕으로 UI를 갱신하는 것과 DB 갱신을 병렬적으로 진행시키고 싶었다. 그게 더 작업 속도를 빠르게 할 수 있을거라고 생각하기 때문이다. 뭐.. 대충 이런 흐름을 원했다. 그림이 좀 이상하긴 한데ㅋㅋ DB갱신은 별도로 분리하지 않고, ApiCall() 코드의 호출 성공 부분에 함께 작성해 뒀다. (가독성이 좋아서) 아무튼, 성공시 DB를 갱신하는 것과, 서버로 부터 수신한 데이터를 반환하는 코드가 병렬로 수행되도록 하는 것이 목표라는 것이다. val data = withContext(Dispatcher.IO){ApiCall()} ApiCall()이 withContext(Dispatcher.IO), I/O 스레드에서 진행이 되기 때문에..
Data Class의 equals와 hashCode를 사용해 DB 갱신하기 Resume때마다 서버로 부터 새로 데이터를 받아와서 DB에 저장하는데, 이때 DB의 데이터를 전부 삭제(;;)하고 새로운 데이터로 DB를 다시 작성하는 방식이었다. 비둘기가 거꾸로 날아도 날긴 나는거라고, 이런 코드가 2년간 유지되어 왔다는 사실도 놀랍지만 resume때 마다 10초 이상 정지된 화면을 바라보며 대기를 하는데 아무런 불만없이 사용해 주던 사용자분들에게도 미안했다. 그러던 중, 얼마전 훑어보았던 드로이드 나이츠 2020 발표 내용에 있던 "Data Class의 equals/hashCode" 내용을 응용해서 문제를 해결할 수 있지 않을까라는 생각들었다. https://speakerdeck.com/taehwandev/amado-effective-han-kotlin?slide=52 아마도 Ef..
ForegroundService 문제 해결하기: ForegroundServiceDidNotStartInTimeException 월요일 좋아근데 출근하고 늘 체크하는 Firebase Crashlystics에서 늘 고질적으로 발생하는 오류의 빈도가 향상된 것을 발견했다.월요일 안좋아 개인적으로 수정해서 빨리 눈앞에서 치워버리고 싶었는데, 지금까진 다른 일이 바빠서 해결을 어영부영 미루던 이슈였다.마침 진행 중이던 바쁜 일도 끝났고, 오늘도 어김없이 문제 목록의 상단에서 날 반겨주었기에 그냥 처리해버리기로 마음 먹었다. 내용 추가: 24.01.24android.app.RemoteServiceException$ForegroundServiceDidNotStartInTimeException 이 오류는 서비스가 시작될 때 startForegroundService() 메소드를 호출한 후 일정 시간 내에 startForeground() 메소드를..