SupervisorJob

서승훈·2024년 5월 23일
post-thumbnail

나르샤 회원가입 로직을 구현하던 중...

kotlinx.coroutines.JobCancellationException: Job was cancelled; job=SupervisorJobImpl{Cancelling}@f53a115

알 수 없는 Exception이 발생했다. chatgpt에게 물어보니

라고 했다. 당연하게도 필자는 전혀 감이 잡히지 않았다...
약 1시간의 삽질 끝에, SupervisorJob을 이용하여 생각보다 쉽게 해결하였다.

SupervisorJob이란?

원래(Job에서 문제가 발생하는 경우)는 아래 자식과 부모에게 에러가 전파된다. 하지만 SupervisorJob을 사용하면 아래 자식만 취소시키고 부모에게는 에러가 전파되지 않는다.

다시 말해 자식 코루틴에 문제가 생겼을 때 부모 코루틴에는 오류가 튀지(?)않게 해주는 것이다.


아래는 SupervisorJob을 적용한 코드이다.

val supervisorJob = SupervisorJob()
viewLifecycleOwner.lifecycleScope.launch(supervisorJob) {
    try {
        val response = RegisterRequestManager.registerRequest(request)
        Log.d(TAG, "response.header : ${response.code()}")

        val token = response.headers()[HeaderUtil.X_AUTH_TOKEN]
        Log.d(TAG, "token is $token")

        PaletteApplication.prefs.token = token ?: ""
        shortToast("회원가입 성공")
    
    }

참고
https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/-supervisor-job.html
https://velog.io/@lyh990517/Android-Coroutine-SupervisorJob-%EC%99%9C-%EC%8D%A8%EC%9A%94

0개의 댓글