Lifecycle生命周期感知型组件可执行操作来响应另一个组件(如 Activity 和 Fragment)的生命周期状态的变化。这些组件有助于您编写出更有条理且往往更精简的代码,此类代码更易于维护。
尤其是在Activity和Fragment在已经默认支持LifeCycle的情况下,我们更有理由来使用它,以便让我们的代码变得更加整洁以及可维护。
本文的内容:
一、Lifecycle的使用
Lifecycle 出现之前,我们通常都是在生命周期的onStart和onStop中处理,我们的逻辑(比如,获取定位等等),随着项目的基类,我们的onStart和onStop会越来越臃肿,并难以维护。
下面,我们通过Lifecycle来实现。
1.1,在Activity中使用
首先,我们创建一个Lifecycle观察者
public class MyActLifeCycleObserver implements LifecycleObserver {
private String mObserverNum;
public MyActLifeCycleObserver(String observerNum) {
this.mObserverNum = observerNum;
}
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public void onCreate() {
printLog("onCreate");
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onStart() {
printLog("onStart");
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void onResume() {
printLog("onResume");
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void onStop() {
printLog("onStop");
}
private void printLog(String eventStatus) {
Log.d("liu.MyActivity", mObserverNum + ": " + eventStatus);
}
}
然后,因为Activity默认已经实现了LifecycleOwner。我们可以直接添加到Activity中。如下
public class TestLifeCycleActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getLifecycle().addObserver(new MyActLifeCycleObserver("observer.onCreate"));
}
}
这样,就完成了,对TestLifeCycleActivity生命周期的监听。在MyActLifeCycleObserver中,处理该Activity的逻辑,很简单吧
1.2,在Application中使用
之前,我们判断App的前后台运行,都是通过registerActivityLifecycleCallbacks()。在onStart跟onStop中通过计数器来判断App的前后台运行的。
现在,我们完全可以通过LifeCycle,更优雅的实现该功能
首先,跟Activity的监听一样,创建一个观察者
/**
* Application的Lifecycle。
* 1,oncreate只会执行一次
* 2,onDestroy不执行
*/
public class MyAppLifeCycleObserver implements LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public void onCreate() {
printLog("onCreate");
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
private void onStart() {
printLog("onStart");
//前台
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void onStop() {
printLog("onStop");
//后台
}
private void printLog(String eventStatus) {
Log.d("liu.MyAppLifeCycle", "--- " + eventStatus);
}
}
然后,添加到自定义的Application中
public class MyLifecycleApp extends Application {
@Override
public void onCreate() {
super.onCreate();
ProcessLifecycleOwner.get().getLifecycle().addObserver(new MyAppLifeCycleObserver());
}
}
最后,在MyAppLifeCycleObserver中,判断App的前后台逻辑。这样是不是更优雅呢。
这里需要注意的是,1,监听的Application的onCreate()方法,只会执行一次,不管是不是多进程;2,onDestroy方法不会执行