android - 为什么我的应用程序启动后,WorkManager会多次触发?

标签 android kotlin background intervals worker

我有一个在其中声明了WorkManager的应用程序,并且在我的应用程序启动后立即调用doWork()重写函数3或4次,而无需系统在代码中随时启动它...

我检查了在应用程序中没有对WorkManager的引用。 App.kt文件(扩展了Application())中只有一个。

在App.kt中:

class App : Application(){

companion object {
    var appSyncRepository = AppSyncRepository()
}
}

在AppSyncRepository.kt中:
class AppSyncRepository {
}

class AppSyncRepositoryWorker(context: Context, workerParams: WorkerParameters) : Worker(context, workerParams) {
override fun doWork(): Result {
    return Result.success()
}
}

我希望不会调用该worker,因为我目前尚未声明任何OneTimeWorkRequestBuilder或任何PeriodicWorkRequestBuilder。

最佳答案

抱歉,我没有足够的声誉来发表评论。

在测试中,您是否设置了PeriodicWorkRequestBuilder请求?如果是这样,您必须取消它。

第一步,我将检查计划的时间。

void cancelJob(){
    WorkManager.getInstance(mContext).cancelAllWorkByTag(SYNC_WORK_JOB1);
    WorkManager.getInstance(mContext).cancelAllWork();
    Log.d(TAG, "Job cancelled!");
}

private boolean isWorkScheduled() {
WorkManager instance = WorkManager.getInstance(mContext);
    ListenableFuture<List<WorkInfo>> statuses = instance.getWorkInfosByTag(SYNC_WORK_JOB1);
    try {
        boolean running = false;
        List<WorkInfo> workInfoList = statuses.get();
        for (WorkInfo workInfo : workInfoList) {
            WorkInfo.State state = workInfo.getState();
            running = state == WorkInfo.State.RUNNING | state == WorkInfo.State.ENQUEUED;
        }
        return running;
    } catch (ExecutionException e) {
        e.printStackTrace();
        return false;
    } catch (InterruptedException e) {
        e.printStackTrace();
        return false;
    }
}

或者您可以在终端窗口中运行
adb shell dumpsys jobscheduler | grep -C 5 SyncWorkManagerService
adb shell dumpsys jobscheduler | grep -B 10 "Pending queue"

关于android - 为什么我的应用程序启动后,WorkManager会多次触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56809588/

相关文章:

android - 从 fragment 设置 WebView 的页面标题

Java/Kotlin/Spring Boot。如何在异常发生时自动获取参数值?

bash - 杀死 codeship 中生成的后台进程

java - SurfaceTexture 中的 texName 是什么?

android - 如何使用 sencha touch 和 phoneGap 内置的 Google Map 提高应用程序的性能?

android - 不要从浏览器打开自定义链接

android - Kotlin 与 JavaFXPorts 的兼容性

generics - 如何在 Kotlin 中指定递归泛型参数?

html - 背景顶部的种类(如边框顶部)

image - iOS Colorwithpattern - 使用自定义 iPhone5 图像