자꾸 태클거는거 같아 죄송합니다 DataStore saveSortMode, getSortMode 함수 관련
Datastore 관련해서 Preferences Datastore와 ProtoDatastore 를 사용할때 함수를 호출할때 ui 스레드에서 호출해도 작업은 내부에서 Dispatcher.IO로 이동하여 처리하기 때문에
직접 withContext를 통해 Dispatchers.IO 로 변경해주지 않아도 될것같습니다
반환값이 필요없는 경우엔 그냥 viewModelScope.launch() {}, 반환값이 반드시 필요할경우엔 viewModelScope.async..await() 혹은 withContext(viewModelScope.coroutineContext) 로 감싸서 호출하면 될거같습니다
retrofit, room, datastore 까지 주로 쓰이는 네트워크 관련 작업이 모두 main-safe 되어있네요 ㄷ
참고)
https://developer.android.com/codelabs/android-preferences-datastore#3
New way of storing data in Android - Jetpack DataStore
Câu trả lời 2
2
지적해주신것이 맞습니다.
다만 조금 해명아닌 해명을 하자면 제가 작년에 강의용 앱을 처음 만들때는 이렇게 디스패처를 굳이 바꿔주지 않으면 'Error: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.' 에러가 나서 작동을 하지 않았기 때문에 DB에 접근하는 viewmodelscope의 디스패처는 따로 IO로 설정할 필요가 있었습니다.
그런데 라이브러리 버전이 올라가면서 현재 room, datastore 등은 자동으로 디스패처를 전환하도록 변경된것 같은데 강의자료를 공개한 이후로 제가 그걸 확인하지 못했네요. 이렇게 라이브러리가 버전업되면서 API 사용법이 변경되는 경우도 많기 때문에 이런 부분을 꼼꼼하게 체크하시면 더 안정적인 앱을 만드실 수 있을 것 같습니다.
다른분들도 참고하시라고 Practice2C의 설명란에 내용을 추가했습니다. 다시한 번 알려주셔서 감사드립니다 :-)
1
앗 제가 retrofit 과 room, datastore 등의 라이브러리 변천과정을 모르고 처음부터 main-safe인것으로 알고있었네요..ㄷㄷ ㅠ
retrofit + coroutine에 대해 공부할때
예전에 쓰인 블로그글이나 유튜브 강의등에서 retrofit를 사용할때 Dispatcher IO로 굳이 CoroutineContext를 변경해줬는지, room 을 사용할때도 그렇고
굳이 해주지 않아도 될 작업을 왜 해주는 것인가에 대한 의문을 가지고있었는데 그때는 그게 맞는 방법이었던거군요..
감사합니다!
Coroutine, Flow 질문
0
380
1
Transformations import 안됨
0
572
1
moshi관련 질문입니다.
0
542
2
searchBooks() 에서 북 검색 입력을 너무 빨리 할 경우 마지막 글자로 검색이 안돼요.
0
355
1
안드로이드에서 아키텍처 패턴
0
404
1
RecyclerView.Adapter vs ListAdpater
0
460
1
Flows 와 Coroutine
1
556
1
[BookSearchAdapter] onBindViewHolder의 currentList[position] 질문
0
357
1
코루틴 메모리 관련해서 질문드립니다!
0
442
1
Java Bill Pugh Solution 에서 INSTANCE
0
458
1
nested json에서 특정 부분만 파싱하는법
0
487
1
Fragment에서의 viewBinding
0
513
3
toolbar 질문드립니다.
0
404
2
EditText 에서 delay 주셔서 처리하셨는데 flow 의 debounce() 하고 같은건가요?
2
560
1
코루틴 관련 질문
0
539
1
오류
1
489
2
강사님! 직렬화 라이브러리를 Moshi, kotlin serialization 두개를 사용하시던데 이유가 있으신가요?
1
740
1
EditText 는 kill 해도 값이 잘 저장되어있던데 혹시 제가 잘못테스트했을까요?
1
343
1
서버도 페이징 기능이 되는데 Paging 라이브러리가 필요할까요?
1
520
1
GSON 이 아닌 Moshi 를 사용하시는 이유가 있을까요?
1
1263
1
EditText 는 액티비티가 재생성되어도 값이 남아있던데 이유가 궁금해요
1
492
1
ViewModel 생성시 왜 초기값을 받지 않도록 했을까요?
1
432
1
Room DB에 id 항목 추가
0
246
1
안녕하세요. 용어에 대해 질문이 있어 글 남깁니다.
0
397
2

