Android 为什么我的应用一启动WorkManager就被解雇多次?

Android 为什么我的应用一启动WorkManager就被解雇多次?,android,kotlin,background,intervals,worker,Android,Kotlin,Background,Intervals,Worker,我有一个应用程序,我在其中声明了WorkManager,并且doWork()重写函数在我的应用程序启动时会被调用3或4次,而不要求系统在代码中的任何时候启动它 我已经检查过,在应用程序中不会引用WorkManager。App.kt文件中只有一个(扩展了Application()) 在App.kt中: class App : Application(){ companion object { var appSyncRepository = AppSyncRepository() } }

我有一个应用程序,我在其中声明了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()
}
}

我希望员工不会被呼叫,因为我目前既没有声明任何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;
    }
}

您以前在应用程序中是否有任何
周期性工作请求
?即使您删除
PeriodicWorkRequest
并重新安装应用程序,您已经排队的
PeriodicWorkRequest
也不会被销毁,除非您取消它。所有定期工作都将在应用程序进程启动时调用。此外,似乎有多个相同作业的请求排队。使用
enqueueUniquePeriodicWork
避免重复工作。不,我没有使用PeriodicWorkRequestBuilder或OneTimeWorkRequestBuilder添加任何代码。我认为Sanlok Lee是真的,在分析了这个问题(几个月前)之后,如果我记得清楚的话,你写的就是解释。什么是SyncWorkManagerService?
adb shell dumpsys jobscheduler | grep -C 5 SyncWorkManagerService
adb shell dumpsys jobscheduler | grep -B 10 "Pending queue"