Service-LifecycleService のライフサイクルを監視する
Service ライフサイクルの監視を容易にするために、Android はService を継承しLifecycleOwnerインターフェイスを実装するLifecycleServiceという名前のクラスを提供します。
/** * {@link LifecycleOwner} でもあるサービス。 */ public class LifecycleService extends Serviceimplements LifecycleOwner { private Final ServiceLifecycleDispatcher mDispatcher = new ServiceLifecycleDispatcher(this); }
Activity/Fragment と同様に、使用できるgetLifecycle()というメソッドも提供されます。
@Override public Lifecycle getLifecycle() { return mDispatcher.getLifecycle(); }
Service と LifecycleService の関係を表示する
階層関係を説明するために画像を使用します。出典 Android 公式 Web サイト:
依存関係をインポートする
ネイティブクラスAndroid SDK
はなく、インポートする必要がある拡張ライブラリはありません。LifecycleService
Android
実装「androidx.lifecycle:lifecycle-extensions:2.2.0」 の下位バージョンでは、実装「android.arch.lifecycle:extensions:1.1.1」を導入できます。
コード例
追加が成功すると、LifecycleService クラスを使用できるようになります。LifecycleService を継承する MyService というクラスを作成します。LifecycleService は Service の直接のサブクラスであり、使用される通常の Service と何ら変わりません。
public class MyService extends LifecycleService{ private MyServiceObserver myServiceObserver; public MyService(){ myServiceObserver = new MyServiceObserver(); getLifecycle().addObserver(myServiceObserver);// 追加観察者 } }
manifest.xml ファイルに登録する必要があります
<サービス android:name=".service.SuspendwindowService" />
次は MyServiceObserver クラスで、LifecycleObserverインターフェイスを実装する必要があります。Service ライフサイクルが変更されたときにメソッドの 1 つを同期的に呼び出す必要がある場合は、@OnLifecycleEventタグを使用してマークを付けることができます。
public class MyServiceObserverimplements LifecycleObserver{ private String TAG = this.getClass().getName(); // Service の onCreate() メソッドが呼び出されたときにこのメソッドが呼び出されるようにしたい @OnLifecycleEvent(Lifecycle.Event.ON_CREATE) private void startGetLocation(){ Log.d(TAG, "startGetLocation()"); } // Service の onDestroy() メソッドが呼び出されたときにこのメソッドが呼び出されるようにしたい @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) private void stopGetLocation( ){ Log.d(TAG, "stopGetLocation()"); } }
最後に、ページ上の 2 つのボタンを使用してサービスの開始と停止を制御し、コードをテストします。
findViewById(R.id.btnStartService).setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v){ インテントの意図 = new Intent(MainActivity.this, MyService.class); startService(intent);//启アニメーション } }); findViewById (R.id.btnStopService).setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v){ Intenttent = new Intent(MainActivity.this, MyService.class); stopService (意図);//停止 } });
Logcatでわかるように、 MyServiceObserver の@OnLifecycleEventタグを持つメソッドは、Service ライフサイクルの変更に応じて自動的に呼び出されます。このようにして、サービスのライフサイクルの監視が完了しました。
com.michael.lifecycleservicedemo.MyServiceObserver: startGetLocation() com.michael.lifecycleservicedemo.MyServiceObserver: stopGetLocation()
プロジェクトアドレス:github