天天看點

WorkManager 在多程序應用中的進階用法

現在,我們更是在 WorkManager 2.6 中進一步增加了能夠讓 Worker 在任意程序中運作的支援,并且能将 Worker 綁定到指定的程序。多程序支援對于需要在多個程序中運作 Worker 的應用非常有用。

雖然大多數應用隻需要一個程序就能良好地工作,但有些應用則需要多個程序來完成它們的工作,這在過去很難管理不同程序之間的工作,但現在一切都不一樣了!

從 WorkManager 2.6 開始,您可以使用 RemoteListenableWorker 或 RemoteCoroutineWorker 将 Worker 綁定到特定程序。

如果您使用 Kotlin 來實作 Worker,請使用 RemoteCoroutineWorker,而其他情況則使用 RemoteListenableWorker。在本文中我們的示例将使用 Kotlin 來實作,我們也在下面的示例連結中提供了相似的 Java 實作。

RemoteCoroutineWorker 實作起來和 CoroutineWorker 很相像,但不用覆寫 doWork,而是覆寫 doRemoteWork,并在生成 WorkRequest 時将 ARGUMENT_CLASS_NAME 和 ARGUMENT_PACKAGE_NAME 兩個參數傳入 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<ExampleRemoteCoroutineWorker>
   .setInputData(data)
   .build()           

然後您需要像這樣為每個 RemoteWorkerService 在 AndroidManifest 中添加 service 定義:

<manifest ... >
    <service
            android:name="androidx.work.multiprocess.RemoteWorkerService"
            android:exported="false"
            android:process=":worker1" />

    <!-- RemoteWorkerService2 extends RemoteWorkerService -->    
    <service
            android:name=".RemoteWorkerService2"
            android:exported="false"
            android:process=":worker2" />
    ...
</manifest>           

您可以在新的 WorkManager 多程序示例 中了解這些新功能如何工作,它同時使用 RemoteCoroutineWorker 和 RemoteListenableWorker 實作。

您還可以在我們的 釋出說明 中看到在 WorkManager 2.6 發生的變更和改進的詳細清單。

如果你想開發小程式或者了解小程式更多的内容,可以通過第三方專業開發平台,來幫助你實作開發需求:

廈門在乎科技

-專注

廈門小程式開發公司

、app開發、網站開發、H5小遊戲開發

繼續閱讀