使用lifecycle的原因:activity 和fragment 是有声明周期的,有时候,我们的很多操作需要写在声明周期的方法中,比如,下载,文件操作等,这样很多情况下回导致,我们在activity中的声明周期方法中写越来越多的代码,activity或者fragment 越来越臃肿,代码维护越来越困难。 使用lifecycle就可以很好的解决这类问题。lifecycle代码简洁,我们可以通过实现LifecycleObserver 接口,来监听声明周期,然后我们在activity和fragment中去注册监听。
1.build.gradle中添加implementation "androidx.lifecycle:lifecycle-runtime:2.2.0"
2.实现自定义的lifecycleObsever:
package com.jxd.studyone.lifecycle;
import android.util.Log;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;
public class MyLifecycle implements LifecycleObserver {
Lifecycle mLifecycle;
public MyLifecycle(Lifecycle lifecycle){
mLifecycle = lifecycle;
// 将自己加入到目标组件生命周期的监听列表中
mLifecycle.addObserver(this);
}
public void removeLifeCycle(){
mLifecycle.removeObserver(this);
}
// 在onCreate时调用
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public void onLifeCreate(){
Log.d("MyLifecycle", "onLifeCreate");
}
// 在onStart时调用
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onLifeStart(){
Log.d("MyLifecycle", "onLifeStart");
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void onLifeResume(){
Log.d("MyLifecycle", "onLifeResume");
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void onLifePause(){
Log.d("MyLifecycle", "onLifePause");
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void onLifeStop(){
Log.d("MyLifecycle", "onLifeStop");
}
// 在onDetsory时调用
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onLifeDestory(){
Log.d("MyLifecycle", "onLifeDestory");
}
}
3.在Activity中进行调用:
public class LifecycleActivity extends AppCompatActivity {
private MyLifecycle myLifecycle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lifecycle);
myLifecycle = new MyLifecycle(getLifecycle());
}
@Override
protected void onDestroy() {
super.onDestroy();
myLifecycle.removeLifeCycle();
}
}