Jetpack 之 LifecycleService

3,412 阅读1分钟

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后看下运行结果:

image.png

至此,使用LifecycleService监听Service生命周期就已经完成,下一篇我们将介绍ProcessLifecycleOwner监听应用程序的生命周期。