【问题标题】:CoroutineWorker doesn't startCoroutineWorker 没有启动
【发布时间】:2021-05-06 13:08:54
【问题描述】:

我尝试运行该作业,但我一直收到一个错误。代码:

    class UpdaterJob @Inject constructor(
    private val context: Context,
      workerParams: WorkerParameters
) :
    CoroutineWorker(context, workerParams) {

    override suspend fun doWork(): Result = //coroutineScope {
        withContext(Dispatchers.IO) {
            Result.success()
            //  }
        }


    companion object {
        const val TAG = "UpdateChecker"

        fun setupTask(context: Context) {
            val constraints = Constraints.Builder()
                .setRequiredNetworkType(NetworkType.CONNECTED)
                .build()

            val request = PeriodicWorkRequestBuilder<UpdaterJob>(
                1, TimeUnit.DAYS,
                1, TimeUnit.HOURS
            )
                .addTag(TAG)
                .setConstraints(constraints)
                .build()


            //  WorkManager.getInstance(context).enqueue(request)

            WorkManager.getInstance(context)
                .enqueueUniquePeriodicWork(TAG, ExistingPeriodicWorkPolicy.REPLACE, request)
        }

        fun cancelTask(context: Context) {
            WorkManager.getInstance(context).cancelAllWorkByTag(TAG)
        }
    }
}

我试图通过 Dagger2: Unable to inject dependencies in WorkManager 制作我的 DaggerWorkerFactory,但我仍然遇到同样的错误,日志:

2021-02-02 13:39:15.894 7542-7542/com.rulate.rulateapp.debug E/AndroidRuntime:致命异常:主进程: com.rulate.rulateapp.debug,PID:7542 java.lang.NoClassDefFoundError: 未能解决: Landroidx/work/impl/utils/futures/AbstractFuture; 在 androidx.work.impl.WorkManagerImpl.initialize(WorkManagerImpl.java:181) 在 androidx.work.WorkManager.initialize(WorkManager.java:210) 在 com.ruler.rulateapp.ui.App.configureWorkManager(App.kt:60) 在 com.ruler.rulateapp.ui.App.onCreate(App.kt:47) 在 android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1192) 在 android.app.ActivityThread.handleBindApplication(ActivityThread.java:6712) 在 android.app.ActivityThread.access$1300(ActivityThread.java:237) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1913) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:223) 在 android.app.ActivityThread.main(ActivityThread.java:7656) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 引起:java.lang.ClassNotFoundException: androidx.work.impl.utils.futures.AbstractFuture 在 java.lang.VMClassLoader.findLoadedClass(本机方法) 在 java.lang.ClassLoader.findLoadedClass(ClassLoader.java:738) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:363) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:312) 在 androidx.work.impl.WorkManagerImpl.initialize(WorkManagerImpl.java:181) 在 androidx.work.WorkManager.initialize(WorkManager.java:210) 在 com.ruler.rulateapp.ui.App.configureWorkManager(App.kt:60) 在 com.ruler.rulateapp.ui.App.onCreate(App.kt:47) 在 android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1192) 在 android.app.ActivityThread.handleBindApplication(ActivityThread.java:6712) 在 android.app.ActivityThread.access$1300(ActivityThread.java:237) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1913) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:223) 在 android.app.ActivityThread.main(ActivityThread.java:7656) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 原因:java.lang.NoClassDefFoundError:解析失败: Lcom/google/common/util/concurrent/ListenableFuture; 在 androidx.work.impl.WorkManagerImpl.initialize(WorkManagerImpl.java:181) 在 androidx.work.WorkManager.initialize(WorkManager.java:210) 在 com.ruler.rulateapp.ui.App.configureWorkManager(App.kt:60) 在 com.ruler.rulateapp.ui.App.onCreate(App.kt:47) 在 android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1192) 在 android.app.ActivityThread.handleBindApplication(ActivityThread.java:6712) 在 android.app.ActivityThread.access$1300(ActivityThread.java:237) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1913) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:223) 在 android.app.ActivityThread.main(ActivityThread.java:7656) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 引起:java.lang.ClassNotFoundException:找不到类 路径上的“com.google.common.util.concurrent.ListenableFuture”: DexPathList[[压缩文件 "/data/app/~~hUB4V6hTR0qg-4tdmVBeBg==/com.rulate.rulateapp.debug-qn72fwjfGyiwIXEoVyVyTw==/base.apk"],nativeLibraryDirectories=[/data/app/~~hUB4V6hTR0qg-4tdmVBeBg==/com.规则.rulateapp.debug-qn72fwjfGyiwIXEoVyVyTw==/lib/x86, /data/app/~~hUB4V6hTR0qg-4tdmVBeBg==/com.rulate.rulateapp.debug-qn72fwjfGyiwIXEoVyVyTw==/base.apk!/lib/x86, /system/lib, /system_ext/lib]] 在 dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:379) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:312) 在 androidx.work.impl.WorkManagerImpl.initialize(WorkManagerImpl.java:181) 在 androidx.work.WorkManager.initialize(WorkManager.java:210) 在 com.ruler.rulateapp.ui.App.configureWorkManager(App.kt:60) 在 com.ruler.rulateapp.ui.App.onCreate(App.kt:47) 在 android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1192) 在 android.app.ActivityThread.handleBindApplication(ActivityThread.java:6712) 在 android.app.ActivityThread.access$1300(ActivityThread.java:237) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1913) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:223) 在 android.app.ActivityThread.main(ActivityThread.java:7656) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

【问题讨论】:

    标签: android kotlin


    【解决方案1】:

    您是否尝试过将番石榴显式添加到您的 build.gradle 依赖项中:

    implementation 'com.google.guava:guava:28.2-android'
    

    【讨论】:

    • 错误消失了,但还是不行(
    • 你能用enqueue()检查并创建一个init { /* Logs */ }来检查工人是否被创建
    • 我对需要做什么有点困惑。用调试器检查后触发了setupTask函数,但是DoWork没有启动
    猜你喜欢
    • 2022-10-13
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    • 2016-07-20
    • 2021-12-10
    • 2016-12-19
    • 2015-09-23
    相关资源
    最近更新 更多