问题:想要知道应用程序当前处在前台、后台、或从后台回到前台,想要知道应用的状态,
LifeCycle提供了ProcessLifeCycleOwner的类,方便我们知道整个应用程序的生命周期情况
ProcessLifeCycleOwner 使用方法
1.首先添加依赖
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
ProcessLifeCycleOwner 其本质也是观察者模式,由于要观察整个应用,需要在Application中进行代码编写。
- 定义一个ApplicationObserver类,实现LifecycleObserver接口,用来监听应用生命周期
public class ApplicationObserver implements LifecycleObserver {
private String TAG = "ApplicationObserver";
/**
* 在应用程序的整个生命周期中只会调用一次
*/
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public void onCreate() {
Log.e(TAG, "onCreate()");
}
/**
* 应用在前台出现时被调用
*/
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onStart() {
Log.e(TAG, "onStart()");
}
/**
* 应用在前台出现时被调用
*/
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void onResume() {
Log.e(TAG, "onResume()");
}
/**
* 当应用程序退出到后台时被调用
*/
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void onPause() {
Log.e(TAG, "onPause()");
}
/**
* 当应用程序退出到后台时被调用
*/
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void onStop() {
Log.e(TAG, "onStop()");
}
/**
* 永远不会被调用,系统不会分发调用ON_DESTROY 事件
*/
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroy() {
Log.e(TAG, "onDestroy()");
}
}
- 在Application中使用ApplicationObserver
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
//监听应用的生命周期情况
ProcessLifecycleOwner.get().getLifecycle().addObserver(new ApplicationObserver());
}
}
日志
使用起来非常简单,不会给项目增加任何耦合度,需要注意的是:
- ProcessLifeCycleOwner 是针对整个应用程序的监听,与Activity数量无关。
- Lifecycle.Event.ON_CREATE只会被调用一次,Lifecycle.Event.ON_DESTROY永远不会被调用。
- 首次被打开或应用程序从后台到前台,会依次调用Lifecycle.Event.ON_START、Lifecycle.Event.ON_RESUME
- 从前台到后台会依次调用Lifecycle.Event.ON_PAUSE、Lifecycle.Event.ON_STOP
LifecycleOwner是接口
public interface LifecycleOwner {
/**
* Returns the Lifecycle of the provider.
*
* @return The lifecycle of the provider.
*/
@NonNull
Lifecycle getLifecycle();
}
LifecycleOwner 通过getLifecycle(LifecycleObserver observer)实现观察者模式的。
总结
所有具有生命周期的组件都能够使用LifeCycle。包括Activity、Service、Fragment、Applicaption。LifeCycle组件存在的主要意义就是帮我们解耦,让自定义组件也能够感受到生命周期的变化。不需要再担心内存泄漏等问题。