1.LifecycleService介绍
在上一篇中我们介绍了如何使用LifeCycle来监听页面的生命周期,以达到解耦的目的;我们知道,拥有生命周期概念的Android系统组件除了Activity、Fragment之外,还有一个很重要的组件就是Service。针对Service生命周期解耦的方案,Jetpack提供了LifecycleService组件。LifecycleService继承Service并实现了LifecycleOwner接口。下面我们看下LifecycleService源码:
public class LifecycleService extends Service implements LifecycleOwner {
private final ServiceLifecycleDispatcher mDispatcher = new ServiceLifecycleDispatcher(this);
@CallSuper
@Override
public void onCreate() {
mDispatcher.onServicePreSuperOnCreate();
super.onCreate();
}
@CallSuper
@Nullable
@Override
public IBinder onBind(@NonNull Intent intent) {
mDispatcher.onServicePreSuperOnBind();
return null;
}
@SuppressWarnings("deprecation")
@CallSuper
@Override
public void onStart(@Nullable Intent intent, int startId) {
mDispatcher.onServicePreSuperOnStart();
super.onStart(intent, startId);
}
@CallSuper
@Override
public int onStartCommand(@Nullable Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
@CallSuper
@Override
public void onDestroy() {
mDispatcher.onServicePreSuperOnDestroy();
super.onDestroy();
}
@Override
@NonNull
public Lifecycle getLifecycle() {
return mDispatcher.getLifecycle();
}
}
2.使用LifecycleService监听Service生命周期
(1)首先我们需要在app的build.gradle文件中添加相关依赖:
dependencies {
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
}
(2)创建感知Service的监听PerceptionServiceListener实现LifecycleObserver,使用@OnLifecycleEvent注解,定义需要监听的生命周期;具体代码如下:
public class PerceptionServiceListener implements LifecycleObserver {
private static final String TAG = "PerceptionServiceListener";
@SuppressLint("LongLogTag")
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
private void onCreate() {
Log.d(TAG, "onCreate");
}
@SuppressLint("LongLogTag")
@OnLifecycleEvent(Lifecycle.Event.ON_START)
private void onStart() {
Log.d(TAG, "onStart");
}
@SuppressLint("LongLogTag")
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
private void onStop() {
Log.d(TAG, "onStop");
}
@SuppressLint("LongLogTag")
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
private void onDestroy() {
Log.d(TAG, "onDestroy");
}
}
(3)创建自定义Service继承LifecycleService并注册PerceptionServiceListener,源码如下:
public class CustomService extends LifecycleService {
public CustomService(){
PerceptionServiceListener perceptionServiceListener = new PerceptionServiceListener();
getLifecycle().addObserver(perceptionServiceListener);
}
}
(4)启动Service后看下运行结果:
至此,使用LifecycleService监听Service生命周期就已经完成,下一篇我们将介绍ProcessLifecycleOwner监听应用程序的生命周期。