我有一个应用程序,其中已声明一个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。
答案 0 :(得分:1)
对不起,我没有足够的声誉来发表评论。
在测试中,您是否设置了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"