Foreword
Android lifecycle uses detailed
Android lifecyle source anatomy
Android livedata source anatomy
Android lifecycle combat and the use of advanced
github sample 地址: ArchiteComponentsSample
Android Architecture Components, and We have already explained the lifecycle, LiveData use and principle, today, let us look at the lifecycle Lai combat in the project. Mainly on two points
- LifecycleHandler package
- MVP introduced lifecycle, can monitor their own life cycle activity
LifecycleHandle package
We usually use when the handler, when activity onDestroy, the need to manually take removeMessage or removeCallBack, otherwise, it is prone to memory leaks.
@Override
protected void onDestroy() {
super.onDestroy();
mHandler.removeCallbacksAndMessages(null);
}
For us developers, it is clear that a repeat of the action. Together we have to reduce this repetitive action by lifecycle, let it within their own release.
The core principle is very simple, internal monitor changes in activity life cycle, remove the message and callback at onDestroy time.
public class LifecycleHandler extends Handler implements FullLifecycleObserver {
private LifecycleOwner mLifecycleOwner;
public LifecycleHandler(LifecycleOwner lifecycleOwner) {
mLifecycleOwner = lifecycleOwner;
addObserver();
}
public LifecycleHandler(LifecycleOwner lifecycleOwner, Callback callback) {
super(callback);
mLifecycleOwner = lifecycleOwner;
addObserver();
}
public LifecycleHandler(LifecycleOwner lifecycleOwner, Looper looper) {
super(looper);
mLifecycleOwner = lifecycleOwner;
addObserver();
}
public LifecycleHandler(LifecycleOwner lifecycleOwner, Looper looper, Callback callback) {
super(looper, callback);
mLifecycleOwner = lifecycleOwner;
addObserver();
}
private void addObserver() {
if (mLifecycleOwner != null) {
mLifecycleOwner.getLifecycle().addObserver(new FullLifecycleObserverAstrong textdapter(mLifecycleOwner, this));
}
}
@Override
public void onCreate(LifecycleOwner owner) {
}
@Override
public void onStart(LifecycleOwner owner) {
}
@Override
public void onResume(LifecycleOwner owner) {
}
@Override
public void onPause(LifecycleOwner owner) {
}
@Override
public void onStop(LifecycleOwner owner) {
}
@Override
public void onDestroy(LifecycleOwner owner) {
removeCallbacksAndMessages(null);
}
}
We look at this line of code
mLifecycleOwner.getLifecycle().addObserver(new FullLifecycleObserverAdapter(mLifecycleOwner, this));
FullLifecycleObserverAdapter What is it?
FullLifecycleObserverAdapter
public class FullLifecycleObserverAdapter implements LifecycleObserver {
private final FullLifecycleObserver mObserver;
private static final String TAG = "FullLifecycleObserverAd";
private final LifecycleOwner mLifecycleOwner;
FullLifecycleObserverAdapter(LifecycleOwner lifecycleOwner, FullLifecycleObserver observer) {
mLifecycleOwner = lifecycleOwner;
mObserver = observer;
}
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public void onCreate() {
Log.i(TAG, "onCreate: ");
mObserver.onCreate(mLifecycleOwner);
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onStart() {
Log.i(TAG, "onStart: ");
mObserver.onStart(mLifecycleOwner);
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void onResume() {
Log.i(TAG, "onResume: ");
mObserver.onResume(mLifecycleOwner);
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void onPause() {
Log.i(TAG, "onPause: ");
mObserver.onPause(mLifecycleOwner);
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void onStop() {
Log.i(TAG, "onStop: ");
mObserver.onStop(mLifecycleOwner);
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroy() {
Log.i(TAG, "onDestroy: ");
mObserver.onDestroy(mLifecycleOwner);
}
}
FullLifecycleObserver
public interface FullLifecycleObserver extends LifecycleObserver {
void onCreate(LifecycleOwner owner);
void onStart(LifecycleOwner owner);
void onResume(LifecycleOwner owner);
void onPause(LifecycleOwner owner);
void onStop(LifecycleOwner owner);
void onDestroy(LifecycleOwner owner);
}
FullLifecycleObserver is a custom interface to our own, inherit LifecycleObserver, various methods of correspondence activity life cycle.
FullLifecycleObserverAdapter realized LifecycleObserver, using @OnLifecycleEvent notes, when changes in the life cycle of activity will be the appropriate callback method, we then callback onCreate, onStart methods observer on the inside, which is somewhat similar proxy mode. Call relations are summarized as follows:
Later want to observe the lifecycle life cycle, then only need mLifecycleOwner.getLifecycle().addObserver(new FullLifecycleObserverAdapter(mLifecycleOwner, this));
this line of code
One might ask, why do you want this design
Plus FullLifecycleObserver this interface, mainly in order to correspond with the activity of the life cycle.
LifecyclePresenter package
public class LifecyclePresenter implements IPresenter, FullLifecycleObserver {
private static final String TAG = "BasePresenter";
private final LifecycleOwner mLifecycleOwner;
public LifecyclePresenter(LifecycleOwner lifecycleOwner) {
mLifecycleOwner = lifecycleOwner;
mLifecycleOwner.getLifecycle().addObserver(new FullLifecycleObserverAdapter(lifecycleOwner, this));
}
@Override
public void onCreate(LifecycleOwner owner) {
Log.i(TAG, "onCreate: owner = " + owner);
}
@Override
public void onStart(LifecycleOwner owner) {
Log.i(TAG, "onStart: owner = " + owner);
}
@Override
public void onResume(LifecycleOwner owner) {
Log.i(TAG, "onResume: owner = " + owner);
}
@Override
public void onPause(LifecycleOwner owner) {
Log.i(TAG, "onPause: owner = " + owner);
}
@Override
public void onStop(LifecycleOwner owner) {
Log.i(TAG, "onStop: owner = " + owner);
}
@Override
public void onDestroy(LifecycleOwner owner) {
Log.i(TAG, "onDestroy: owner = " + owner);
}
}
Android technology people, one unruly code farmers.