kotlin 合成工作管理器未被触发

xeufq47z  于 2023-01-26  发布在  Kotlin
关注(0)|答案(1)|浏览(137)

我有一个应用程序,使用Worker通过互联网更新其服务。
然而,工人没有被触发。
Worker.kt:

class MyWorker(
    private val container: AppContainer,
    ctx: Context,
    params: WorkerParameters
) : CoroutineWorker(ctx, params) {

    override suspend fun doWork(): Result {

        return withContext(Dispatchers.IO) {
            return@withContext try {

                val response = container.onlineRepository.getData()

                // Load the data
                container.offlineRepository.load(
                    data = response.data
                )

                Result.success()

            } catch (throwable: Throwable) {
                Log.e(
                    TAG, throwable.message, throwable
                )
                Result.failure()
            }
        }
    }
}

DataActivity.kt:

class MainActivity : ComponentActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val worker = OneTimeWorkRequestBuilder<MyWorker>().build()
        WorkManager.getInstance(this).enqueue(worker)

        setContent {
            DataApp()
        }
    }

当我检查日志时,没有记录任何内容,因为它没有进入doWork()
有人能帮帮忙吗?

qxsslcnc

qxsslcnc1#

在你的MyWorker类构造函数中,你需要container: AppContainer参数,但在示例化时没有提供,最好使用WorkerParameters来实现。
您可以使用以下命令:

// Passing params
Data.Builder data = new Data.Builder();
data.putString("my_key", my_string);

val worker = OneTimeWorkRequestBuilder<MyWorker>()
.setInputData(data.build())
.build()

WorkManager.getInstance(this).enqueue(worker)

但是,WorkManager的Data类只接受一些特定类型作为值,如参考文档中所述。
除此之外,还有一个大约10 KB的大小限制,由常量MAX_DATA_BYTES指定。
如果数据不是太大,您可能希望将其序列化为String,并将其用作WorkRequest中的inputData。

相关问题