public class NonStickyMutableLiveData <T> extends MutableLiveData { private boolean stickFlag = false; @Override public void observe(@NonNull LifecycleOwner owner, @NonNull Observer observer) { super.observe(owner, observer); if (!stickFlag){ hook(observer); } } private void hook(Observer<? super T> observer){ try { Class<LiveData> liveDataClass = LiveData.class; Field mObserverField = liveDataClass.getDeclaredField("mObservers"); mObserverField.setAccessible(true); Object mObserverObject = mObserverField.get(this); Class<?> mObserverClass = mObserverObject.getClass(); Method get = mObserverClass.getDeclaredMethod("get", Object.class); get.setAccessible(true); Object invokeEntry = get.invoke(mObserverObject, observer); Object observerWraper = null; if (invokeEntry != null && invokeEntry instanceof Map.Entry){ observerWraper = ((Map.Entry) invokeEntry).getKey(); } if (observerWraper == null){ throw new NullPointerException("observerWraper is null"); } Class<?> superClass = observerWraper.getClass().getSuperclass(); Field mLastVersion = superClass.getDeclaredField("mLastVersion"); mLastVersion.setAccessible(true); Field mVersion = liveDataClass.getDeclaredField("mVersion"); mLastVersion.setAccessible(true); Object mVersionValue = mVersion.get(this); mLastVersion.set(observerWraper, mVersionValue); stickFlag = true; } catch (Exception e) { e.printStackTrace(); } }}