diff --git a/app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomViewModel.kt index c888b7cd..c7d3a273 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomViewModel.kt @@ -1,5 +1,6 @@ package kr.co.vividnext.sodalive.live.room +import android.os.Looper import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import com.google.gson.Gson @@ -98,6 +99,9 @@ class LiveRoomViewModel( private val blockedMemberIdList: MutableList = mutableListOf() + // 메인 스레드 보장을 위한 Handler (postValue의 병합(coalescing) 이슈 방지 목적) + private val mainHandler = android.os.Handler(android.os.Looper.getMainLooper()) + fun getUserNickname(memberId: Int): String { for (manager in roomInfoResponse.managerList) { if (manager.id.toInt() == memberId) { @@ -677,11 +681,19 @@ class LiveRoomViewModel( } fun addDonationCan(can: Int) { - _totalDonationCan.postValue(totalDonationCan.value!! + can) + if (Looper.myLooper() == Looper.getMainLooper()) { + _totalDonationCan.value = (_totalDonationCan.value ?: 0) + can + } else { + mainHandler.post { addDonationCan(can) } + } } fun addHeartDonation(heartCount: Int = 1) { - _totalHeartCount.postValue(totalHeartCount.value!! + heartCount) + if (Looper.myLooper() == Looper.getMainLooper()) { + _totalHeartCount.value = (_totalHeartCount.value ?: 0) + heartCount + } else { + mainHandler.post { addHeartDonation(heartCount) } + } } fun donationStatus(roomId: Long, onSuccess: (GetLiveRoomDonationStatusResponse) -> Unit) {