EnjoyLife

LiveData 의 변수는 언제 posVaue 와 value 을 골라서 써야될까? 본문

안드로이드 개발/개발팁

LiveData 의 변수는 언제 posVaue 와 value 을 골라서 써야될까?

Aiden96 2024. 4. 19. 11:03

 

간단하게 말해서 내가  사용하고자 하는 함수가  메인스레드이면  value를 사용, 백그라운드스레드이면

postValue를 사용한다.

 

그럼 내가 사용하는 함수가 메인스레드안에 있는지, 백그라운드 스레드안에 있는지 어떻게 알아?

아래코드로도 쉽게 확인가능하고, 간단한 지식만 있으면  직관적으로 파악이 가능하다.

     if (Thread.currentThread() == Looper.getMainLooper().thread) {
            // 현재 코드가 메인 스레드에서 실행됩니다.
            Log.d("test","This code is running on the main thread.")
        } else {
            // 현재 코드가 백그라운드 스레드에서 실행됩니다.
            Log.d("test","This code is running on a background thread.")
        }

 

 

1.메인스레드에서 사용할 경우가 언제이고 메인스레드는 무슨일을 하는가?

ㄴ메인스레드는 UI스레드라고 하는데  화면에 나타나는 모든 위젯 (Button,Textview,Recyclerveiw,etc)

  관리하는 일을 한다.대표적으로 UI에 데이터를 보여줄때 value를 사용한다. 

 

*메인스레드에서 작동되는 것들...   

ex)UI(위젯) , 버튼클릭,사용자에게 보여주는 데이터 등등...

 

 

2.백그라운드 스레드는 언제 작동하나?

ㄴ메인스레드제이한 모든 작업은 백그라운드 스레드에서 이뤄진다.

 - 알럿창(앱이 포그라운드(메인스레드)에 작업될지라도 알럿창은 백그라운드에서 작동된다)

 - 파일다운로드

 - 네트워크IO 등등 

 

ex) 플레이어를 재생중에 내 아이디를 누군가가 사용할경우 알럿창을 띄운다고 하자.

그러면 플레이어는 메인스레드안에 있고, 알럿은 백그라운드 스레드안에 있는것이다.

당연히 postValue를 사용해야 한다. value 사용한다면 앱이 죽을지 모른다.

 

 

    val error = MutableLiveData<String>()

   //플레이어 재생시 중복아이디 체크 
   //옳은코드 
    override fun onMultiCheck() {
        error.postValue("야 내아이디야!")

    }
   //틀린코드 
    override fun onMultiCheck() {
        error.value = "야 내아이디야!"
        return true
    }