앱 테스트 진행 중에 다음과 같은 Exception이 발생했다. Fatal Exception: java.util.ConcurrentModificationException 여러 스레드에서 하나의 컬렉션에 접근할 때, 동시성 문제가 발생하는 것으로 확인된다. 문제가 발생한 코드로 이동해 보니... object DataManager { private var dataInfos = ArrayList() ..... object Manager 내부의 dataInfos라는 리스트가 있고, 해당 DataManager가 외부에서 여러 스레드에 동시 호출되며 dataInfos에 접근하던 중 문제가 발생하는 것으로 확인했다. 싱글톤 하위 리스트를 여러 스레드 접근에 안전하도록 처리할 필요가 있었다. object DataMan..
코딩
아래와 같이 api 호출 인터페이스를 구성하여 서버와의 통신을 시도했는데, EOFException이 발생했다. interface TestApi { @PUT("/api/test") fun update( @HeaderMap headers: HashMap, @Body request: BodyRequest ): Call } java.io.EOFException: End of input at line 1 column 1 path 통신 후, Response를 반환하는데 Empty Response를 반환하고 있었다. 하지만 내가 작업하면서 NormalResponse Type으로 반환되도록 구성하면서 발생하는 것이 원인이었다. 이 경우 2가지 해결 방법이 존재했다. 1. NormalResponse가 아니라 Unit으로..
달력형 위젯을 구현 중, Background ImageView에 디자이너분이 제작해 주신 테마 이미지를 Bitmap으로 삽입하던 중 다음과 같은 오류가 발생했다. java.lang.IllegalArgumentException: RemoteViews for widget update exceeds maximum bitmap memory usage (used: 7474416, max: 6432000) 무슨 오류인가.. 확인해 보니 Bitmap 메모리 사용량이 한도를 초과한 것이다. 이미지 크기와 해상도가 상이하기 때문에 충분히 발생할 수 있다고 생각했다. 위젯에 최적화된 이미지를 다시 제작하기 전까지는 임시로 크기를 줄여서라도 사용하기로 결정했다. fun getBitmapSize(file: File): Siz..