WorkManager에서 suspend 함수 사용 시 두 번 호출 문제
1. 문제 현상
CoroutineWorker를 사용하는데
이 클래스 내부에서 suspend 함수를 호출하면
해당 suspend 함수를 완료하고 나서 다시 돌아오는 현상이 발생했다....
예를 들어 아래의 사진을 보면
doWork 함수 내에서 tartgetAlarmData를 collect하는데
이때 비동기 작업을 한다(suspend funtion)
그리고 해당 collect 내부에선 Activity를 띄우는데
문제는 Activity를 닫고나서 다시 targetAlarmData를 collect한다
(ReceiverAlarmWork 클래스나 doWork 함수부터 시작하는게 아님, targetAlarmData를 collect하는 부분부터 시작함...)
2. 해결 방법
원하는 타이밍에 해당 workManager를 stop 시켜주면된다
하지만 특정 workManager를 지정하기 위해선 해당 workManager에 이름을 붙여줘야한다
enqueueUniqueWork("uniqueWorkName", ExistingWorkPolicy, OneTimeWorkRequest)
enqueueUniqueWork 함수를 사용해서 시작하려는 workManager에 이름을 붙일 수 있다
여기선 uniqueWorkName을 "onAlarmActivity"로 하였다
그리고 workManager는 onAlarmActivity를 열기 때문에 거기서 이 work를 cancel해주면 된다
아래의 함수를 onAlarmActivity의 onCreate()에서 호출하면 더 이상 ReceiverAlarmWorker가 동작하지 않는다
'IT 관련 지식 > 안드로이드 개발' 카테고리의 다른 글
코틀린 안드로이드 정규식(Regex) 활용하기 -기본부터 심화 (0) | 2022.07.24 |
---|---|
안드로이드 에뮬레이서 밖에서 or 안에서 실행하기 (0) | 2022.05.14 |
안드로이드 특정 에뮬에서만 애드몹 안나올 때 해결!!! (0) | 2021.01.18 |
안드로이드 System UI isn't responding 100% 해결법 (4) | 2021.01.18 |
모든 해결법! The emulator process for AVD Pixel_4_API_30 was killed -1 (0) | 2020.12.01 |