WorkManagerのマルチプロセスアプリケーションでの高度な使用方法

3600 ワード

WorkManager 2.5では、マルチプロセスアプリケーションが指定したプロセスで実行される特定のWorkManagerインスタンスに容易にアクセスできるようにします.
これで、WorkManager 2.6では、任意のプロセスでWorkerを実行できるサポートをさらに追加し、指定したプロセスにWorkerをバインドできます.マルチプロセスサポートは、複数のプロセスでWorkerを実行する必要があるアプリケーションに役立ちます.ほとんどのアプリケーションでは、1つのプロセスだけでうまく動作することができますが、いくつかのアプリケーションでは、異なるプロセス間の作業を管理するのは過去には困難でしたが、今ではすべてが異なります.
WorkManager 2.6から、RemoteListenableWorkerまたはRemoteCoroutineWorkerを使用して特定のプロセスにWorkerをバインドできます.Kotlinを使用してWorkerを実装する場合はRemoteCoroutineWorkerを使用し、その他の場合はRemoteListenableWorkerを使用します.本明細書の例では、Kotlinを使用して実装し、次の例のリンクでも同様のJava実装を提供します.
RemoteCoroutineWorkerは、CoroutineWorkerに似ていますが、doWorkを上書きするのではなく、do**Remote**Workを上書きし、WorkRequestを生成するときにARGUMENT_をCLASS_NAMEとARGUMENT_PACKAGE_NAMEの2つのパラメータがInputDataに入力され、特定のプロセスにバインドされます.
val PACKAGE_NAME = "com.example.background.multiprocess"

// RemoteWorkerService         AndroidManifest.xml
val serviceName = RemoteWorkerService::class.java.name
val componentName = ComponentName(PACKAGE_NAME, serviceName)

val data: Data = Data.Builder()
   .putString(ARGUMENT_PACKAGE_NAME, componentName.packageName)
   .putString(ARGUMENT_CLASS_NAME, componentName.className)
   .build()

return OneTimeWorkRequestBuilder
   .setInputData(data)
   .build()

次に、このように各RemoteWorkerServiceに対してAndroidManifestにサービス定義を追加する必要があります.

    

        
    
    ...

これらの新機能がどのように機能するかは、RemoteCoroutineWorkerとRemoteListenableWorkerを使用して同時に実装される新しいWorkManagerマルチプロセスの例で確認できます.
また、WorkManager 2.6で発生した変更および改善の詳細リストは、リリースの説明に記載されています.
最後に、WorkManagerについて何か質問やアイデアがあれば、いつでも公開された問題トレーサに送信にお問い合わせください.
ここをクリックからのフィードバック、またはお気に入りのコンテンツ、発見された問題を共有することを歓迎します.あなたのフィードバックは私たちにとって非常に重要で、あなたの支持に感謝します!