2일정도 계속 수정해보고 있는데 영 답을 못찾겠어서 질문 드립니다..
job = CoroutineScope(Dispatchers.Default).launch {
val events = mutableListOf<EventData>()
for (no in 0..6) {
yield()
val startTimeMillis = calendar.timeInMillis + 86400000*no
val endTimeMillis = startTimeMillis + 86400000
events.addAll((activity as MainActivity).getEvents(startTimeMillis,endTimeMillis))
}
withContext(Dispatchers.Main) {
binding.relativeLayoutEvents.removeAllViews()
createEvent(events)
}
}
뷰페이저(프래그먼트로 구성) MainActivity에서 함수를 호출하게 되는데,
fun getEvents(startTime: Long, endTime: Long): MutableList<EventData> {
Log.d("태그","시작: ${sdf.format(startTime)}")
val calendar = Calendar.getInstance()
calendar.timeInMillis = startTime
calendar.firstDayOfWeek = Calendar.SUNDAY
val dayOfTheWeek = calendar.get(Calendar.DAY_OF_WEEK) - calendar.firstDayOfWeek
val events = mutableSetOf<EventData>()
val projection = arrayOf(
CalendarContract.Events.CALENDAR_ID,
CalendarContract.Instances.EVENT_ID,
~이후 생략~
Google calendar API를 통하여 이벤트를 불러오는 함수 입니다.
문제는 뷰페이저가
offscreenPageLimit = 1
로 되어있어서 동시에 3개의 프래그먼트가 생성, -> 함수 호출이 되는데

동시에 호출되면 내부 구조에 문제가 생기는 지 파라미터 값이 변형되거나
다른 기타 에러들이 생기는 데 (Dispachters.Main)이나 아예 메인스레드에서 실행할 경우 문제 없이 실행이 됩니다. (렉 빼고는...)

(제가 질문을 조리있게 못 드린 것 같아서 나름 간단하게 도식화 했습니다.)
혹시 위의 방법에서 잘못된 점이나
아니면 추천하실 만한 해결방법이 있을까요?
추측하는 가장 문제는
API에서 받아올 때
while (cursor!!.moveToNext()) 로 받아오고 있는데
반복문에서 간헐적으로(꽤나 자주) 탈출하게 됩니다.