一、背景
传统的MVP或者其它需要获取Activity与Fragment生命周期的方法是定义一个接口,然后在Activity或者Fragment里调用,这样使用起来非常不方便。Lifecycle就是为了解决这个问题而出现的。它可以感知到Activity、Fragment、Service的生命周期,而这种意识确保LiveData只更新处于活跃状态的应用程序组件Observe
二、传统方法
public interface INormalPresenter {
void onCreate();
void onDestroy();
}
public class MainActivity extends AppCompatActivity {
private INormalPresenter mNormalPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_life_cycle);
mNormalPresenter = new NormalPresenter();
mNormalPresenter.onCreate();
}
@Override
protected void onDestroy() {
super.onDestroy();
mNormalPresenter.onDestroy();
}
}
三、引入Lifecycle后
1、通过注解的方法实现
//定义实现LifecycleObserver的接口
public interface ILifeCyclePresenter extends LifecycleObserver {
}
//根据自己关注的事件实现监听
public class LifeCyclePresenter implements ILifeCyclePresenter {
private static final String TAG = "LifeCyclePresenter";
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public void onCreate(@NonNull LifecycleOwner owner) {
Log.d(TAG, "onCreate() called with: owner = [" + owner + "]");
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroy(@NonNull LifecycleOwner owner) {
Log.d(TAG, "onDestroy() called with: owner = [" + owner + "]");
}
}
//Activity里添加观察
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_life_cycle);
getLifecycle().addObserver(new LifeCyclePresenter());
}
2、通过DefaultLifecycleObserver替代注解方式
build.gradle里添加引用
implementation "android.arch.lifecycle:common-java8:1.1.1"
public interface ILifeCyclePresenter extends DefaultLifecycleObserver {
}
public class LifeCyclePresenter implements ILifeCyclePresenter {
private static final String TAG = "LifeCyclePresenter";
@Override
public void onCreate(@NonNull LifecycleOwner owner) {
Log.d(TAG, "onCreate() called with: owner = [" + owner + "]");
}
@Override
public void onDestroy(@NonNull LifecycleOwner owner) {
Log.d(TAG, "onDestroy() called with: owner = [" + owner + "]");
}
}
四、原理
ComponentActivity里通过添加ReportFragment(和Glide一样的原理)或者registerActivityLifecycleCallback来获取Activity的生命周期,通过LifeCycleRegistry(是LifeCycle的实现类,并持有Activity的LifeCycle弱引用)分发出去,应用可通过lifecycle.addObser()添加回调