Last active
May 27, 2018 18:39
-
-
Save joseprl89/fb064c2ca02ec738aa487511d3f07c4e to your computer and use it in GitHub Desktop.
How LifecycleBoundObserver and ObserverWrapper work for Internals of Android Architecture Components Part II- LiveData
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class LifecycleBoundObserver extends ObserverWrapper implements GenericLifecycleObserver { | |
@NonNull final LifecycleOwner mOwner; | |
LifecycleBoundObserver(@NonNull LifecycleOwner owner, Observer<T> observer) { | |
super(observer); | |
mOwner = owner; | |
} | |
@Override | |
boolean shouldBeActive() { | |
return mOwner.getLifecycle().getCurrentState().isAtLeast(STARTED); | |
} | |
@Override | |
public void onStateChanged(LifecycleOwner source, Lifecycle.Event event) { | |
if (mOwner.getLifecycle().getCurrentState() == DESTROYED) { | |
removeObserver(mObserver); | |
return; | |
} | |
activeStateChanged(shouldBeActive()); | |
} | |
@Override | |
boolean isAttachedTo(LifecycleOwner owner) { | |
return mOwner == owner; | |
} | |
@Override | |
void detachObserver() { | |
mOwner.getLifecycle().removeObserver(this); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment