왜 update 내부에서 코루틴으로 launch 하면 버그가 발생하나요?
339
작성한 질문수 2
scope.launch {
viewModel.undoSharedFlow.collectLatest {
if (webView.canGoBack()) {
webView.goBack()
} else {
scaffoldState.snackbarHostState.showSnackbar("더 이상 뒤로 갈 수 없음")
}
}
}
scope.launch {
viewModel.redoSharedFlow.collectLatest {
if (webView.canGoForward()) {
webView.goForward()
} else {
scaffoldState.snackbarHostState.showSnackbar("더 이상 앞으로 갈 수 없음")
}
}
답변 1
1
UI 요소가 변경되면 컴포지션이 다시 수행되는 동안 scope.launch 는 반복해서 코루틴을 생성합니다.
그래서 최신 버전 안드로이드 스튜디오에서는 아래와 같이 코드를 작성하면 이를 fix 하도록 가이드 하고 있네요.
컴포저블 내부에서 코루틴을 시작해야 한다면 LaunchedEffect를 사용하도록 안내하고 있습니다.
컴포저블은 UI를 그리는 요소이고 반복해서 호출될 수 있습니다. 이럴 경우 한번만 실행하게 하는 장치가 LaunchedEffect 입니다.
LaunchedEffect 는 이미 수행중인 코루틴이 있을 경우 취소후 다시 실행해 줍니다.
0
컴포지션 시 컴포저블 내부 코루틴의 경우 반복해서 생성될 여지가 있어서, 반복 되는 버그가 발생하는 것이었군요..!
그래서 그대신 LaunchedEffect 를 사용해서 해결이 가능한거였군요 이해가 되었습니다.
답변 감사합니다! 😄
ViewModel 사용 관련 질문
0
94
1
onTabFavorite 콜백 관련 질문
0
68
2
livedata가 왜 필요한 건지 궁금합니다
0
142
3
깃허브에 있는 MemoryTodoRepository 는 룸을 사용하는게 아닌 메모리에 저장, 수정, 삭제 하는건가요?
0
187
1
이젠 아래와 같은 오류가 뜨는데 KSP가 문제 인걸까요?
0
393
2
영상 1분쯤에서 MainActivity에서 viewModel이 저는 안되고 그래들 문제인거 같은데 해결 방법을 모르겠습니다.
0
205
1
전자액자에서 영상과 깃허브의 내용이 달라서 영상을 다보고 깃허브 내용으로 돌려봤는데 권한요청부터가 안됩니다.
0
200
2
Navigation수업에서 string대신 bitmap을 인자로 넘겨주는 방법?
0
185
1
TodoList - 04에서 recentlyDeleteTodo가 null일 경우 처리 방법 문의
0
174
1
나만의 웹 브라우저 03 - UI와 ViewModel 연동 강의에서 질문들이 있습니다.
0
218
2
Scaffold를 사용하면 Content padding parameter it is not used 에러
0
360
1
Material3로 바뀌면서 강의랑 다른 부분이 초반부터 있는데요.
0
232
1
강의에서 사용하는 리소스(이미지 등)을 다운 받을 수 있으면 좋겠어요.
0
255
2
Card Compose에서 elevation 옵션
1
353
1
구글맵 질문입니다
0
237
1
구글맵강의중에서 ..
0
589
7
drawCircle( color = Color.... 부분에서 빨간줄이 ...
0
278
2
val scaffoldState = rememberScaffoldState() 에서 빨간줄이 생기네요
0
530
1
나만의 웹브라우져 02 코드실행시 에뮬레이터에 따라
0
225
1
나만의 웹브라우져 01 코딩 후 실행하면 아래와 같은 오류가 뜨네요
0
3227
2
비만도계산기 로직작성 에서 문제가 발생했어요 ^^
0
343
3
viewModel() 오류 추가질문입니다
0
1131
2
viewModel: MainViewModel = viewModel() 에 오류있습니다
0
542
3
AAR metadata 관련오류발생
0
1455
3





