안녕하세요.
이번 포스팅은 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의 차이점 및 사용방법을 알아 보았습니다.
감사합니다.
'개발 > 안드로이드' 카테고리의 다른 글
안드로이드 include, merge, viewstub (0) | 2021.07.08 |
---|---|
안드로이드 뷰가 그려지는 과정 (0) | 2021.06.09 |
안드로이드 구글STT에서 Recording이 안되는 이유 (9) | 2021.04.26 |
Android MVVM Example 프로젝트 (0) | 2021.04.01 |
안드로이드 MVVM에 GraphQL 적용하기(2/2) (0) | 2020.07.19 |
댓글