我有一个应用程序,使用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()
有人能帮帮忙吗?
1条答案
按热度按时间qxsslcnc1#
在你的
MyWorker
类构造函数中,你需要container: AppContainer
参数,但在示例化时没有提供,最好使用WorkerParameters来实现。您可以使用以下命令:
但是,WorkManager的Data类只接受一些特定类型作为值,如参考文档中所述。
除此之外,还有一个大约10 KB的大小限制,由常量MAX_DATA_BYTES指定。
如果数据不是太大,您可能希望将其序列化为String,并将其用作WorkRequest中的inputData。