Android 为什么我的应用一启动WorkManager就被解雇多次?
我有一个应用程序,我在其中声明了WorkManager,并且doWork()重写函数在我的应用程序启动时会被调用3或4次,而不要求系统在代码中的任何时候启动它 我已经检查过,在应用程序中不会引用WorkManager。App.kt文件中只有一个(扩展了Application()) 在App.kt中: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() } }
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"