본문 바로가기
개발/안드로이드

안드로이드 LiveData setValue 와 postValue

by 창이2 2021. 5. 13.

안녕하세요.

이번 포스팅은 LiveData에 값을 설정하는 2가지 메소드에 대해 알아보겠습니다.

 

setValue는 기본적으로 MainThread에서 실행된다는 걸 전제로 하여 사용하는 메소드입니다.

document를 보면

    @MainThread
    protected void setValue(T value) {
        assertMainThread("setValue");
        mVersion++;
        mData = value;
        dispatchingValue(null);
    }

assertMainThread() 메소드에서 MainThread가 아닐때 바로 에러를 발생하게 됩니다.

 

반면에 postValue는 MainThread가 아닌 WorkerThread에서도 값을 반영 할 수 있게 되어있습니다.

그래서 MainThread가 아닌 Thread에서 값을 반영하기 위해선 postValue를 사용하셔야 됩니다.

postValue 를 보면

 

    @Override
    public void postToMainThread(Runnable runnable) {
        if (mMainHandler == null) {
            synchronized (mLock) {
                if (mMainHandler == null) {
                    mMainHandler = createAsync(Looper.getMainLooper());
                }
            }
        }
        //noinspection ConstantConditions
        mMainHandler.post(runnable);
    }

내부적으로 Main Handler를 통해 처리하기 때문에 MainThread에 반영할 수 있게 되어있습니다.

 

setValue는 항상 메인쓰레드에 존재할때,

postValue는 MainThread가 아닌 Thread에서 작업할 때 사용하시면 될거 같습니다.

 

이상으로 setValue와 postValue의 차이점 및 사용방법을 알아 보았습니다.

감사합니다.

 

댓글