exception

Coroutine 실행 취소- launch를 통해 반환되는 job의 cancel로 코루틴의 실행을 취소할 수 있다.fun main() = runBlocking { val job = launch { repeat(1000) { i -> println("job: I'm sleeping $i ...") delay(500L) } } delay(1300L) // 약간의 시간 동안 delay 한다. println("main: I'm tired of waiting!") job.cancel() // Job을 cancel한다. job.join() // Job의 실행이 완료될 때까지 기다린다. println("main: ..
- 자사 서비스에서 Realm DB를 활용하고 있다. - Realm DB는 빠르고 가벼운 로컬 데이터 저장을 위한 객체 기반 데이터베이스이다.  - Realm DB의 객체로 리스트를 구성할 때는 RealmRecyclerViewAdapter를 이용하여 구성할 수 있다. - 내부 구성은 일반 RecyclerView와 크게 다르지 않다. 하지만 getItem 등의 함수가 RealmDB 자체에서 오리지널 인스턴스를 가져오는 방식으로 동작한다./** * Returns the item in the underlying data associated with the specified position. * * This method will return {@code null} if the Realm instance has ..
안드로이드 스튜디오를 업데이트하고 빌드하는데, 갑자기 위와 같은 오류가 발생했다.명확한 원인을 알기 힘들어서 여러 가지 삽질을 했다... 일단 Settings - Gradle에서 현재 사용 중인 자바 버전을 맞춰줬다. 그리고 ilbs.versions.toml 파일에서 코틀린 버전도 업데이트했다.[versions]accompanistSystemuicontroller = "0.36.0"activityComposeVersion = "1.8.0-alpha07"agp = "8.5.0"biometric = "1.2.0-alpha05"converterGson = "2.9.0"glanceAppwidget = "1.1.1"hiltAndroid = "2.44"kotlin = "1.9.23"coreKtx = "1.12.0"..
프래그먼트를 포커싱 하면 구성한 로직에 따라 비동기적으로 데이터를 호출하고 결과가 오면 해당 프래그먼트의 View를 업데이트하는 로직이 있는데, API 호출하여 데이터 수신된 이후에 해당 View가 더 이상 유효하지 않아서 발생하는 문제로 보입니다.따라서 아래와 같이 코드를 처리했습니다.GetInfoApiTask().executeAsync({ result -> val isValidViewStatus = isAdded && !isDetached && context != null if (!isValidViewStatus) return@executeAsync세 가지 조건을 체크해줬습니다./** * Return true if the fragment is currently added to its act..
Fatal Exception: android.database.CursorWindowAllocationException: Could not allocate CursorWindow '/data/user/0/~. db' of size 4194304 due to error -12.직접 재현되는 것은 아니지만 갑자기 특정 사용자의 Crashlytics로부터 위와 같은 내용의 에러 리포트를 받았습니다.내용을 보니 Cursor 활용 부분에서 메모리 초과로 인한 Crash가 발생한 것으로 파악됩니다.문제가 발생 코드는 특정 조건에 해당하는 데이터의 COUNT를 쿼리하는 내용이었습니다.  데이터나 메모리 사용량 등.. 근본적인 원인들이 있겠으나 일단 대응 코드로 어차피 1개 이상의 존재 유무만 파악하면 되는 것이므로 c..
이미지 로딩 라이브러리 중 하나인 Colil을 Compose UI에서 로딩 시, 실패했을 경우의 Error를 확인하기 위한 방법입니다. val painter = rememberAsyncImagePainter( model = ImageRequest.Builder(context).data(item.imageUrl) .placeholder(R.drawable.blank_ad).build())인자로 받은 item의 imageUrl을 통해 이미지를 로딩합니다. 물론 manifest에 인터넷 사용 권한이 허가되어 있는지 또한 반드시 체크해 주세요.로딩했는데, placeholder의 Drawable로 표시되면 뭔가 문제가 있는 것이겠지요? val state = painter.statepainter의..
Crashlytics 살피던 중, 아래와 같은 Error Report를 발견했다. Fatal Exception: java.lang.IllegalArgumentException: View=DecorView@b5f5db7[TestActivity] not attached to window manager at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:657) at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:564) at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.j..
안드로이드에서 발생하는 Exception들은 기본적으로 Throwable을 상속받고 있다. public open class Throwable(open val message: String?, open val cause: Throwable?) { constructor(message: String?) : this(message, null) constructor(cause: Throwable?) : this(cause?.toString(), cause) constructor() : this(null, null) } 인자로 메시지와 cause Throwable을 받는다. 이를 활용해 Custom Exception을 활용할 수 있다. 보통 Exception이 발생하는 경우, FireBase Crashlytics 등..