Work Manager中doWork()方法未被调用

7

我正在尝试使用WorkManager进行服务器调用。因此,我编写了以下Worker类:

class ServerCallWorker extends Worker {
        public ServerCallWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
            super(context, workerParams);
            Log.d("Testing", "ServerCallWorker constructor method" );
        }

        @NonNull
        @Override
        public Worker.Result doWork() {
            Log.d("Testing", "doWork() method" );
            return Worker.Result.SUCCESS;
        }
    }

我正在从我的Activity的onCreate()方法中调用这个工作类。代码段在这里:

 private void getLocationUpdate() {
        Log.d("Testing", "inside Location Update");
        WorkManager workManager = WorkManager.getInstance();
        Log.d("Testing", "inside Location Update 222");
        Constraints constraints = new Constraints.Builder().setRequiredNetworkType(NetworkType
                .CONNECTED).build();
//        PeriodicWorkRequest recurringWork = new PeriodicWorkRequest.Builder(FilterWorker.class, 15,
//                TimeUnit.MINUTES).build();
        OneTimeWorkRequest wrkReq = new OneTimeWorkRequest.Builder(ServerCallWorker.class).setConstraints(constraints)
                .build();
        Log.d("Testing", "inside Location Update 333");
        workManager.enqueue(wrkReq);
        Log.d("Testing", "inside Location Update 444");
    }

现在,getLocationUpdate()被调用并打印日志。但是doWork()方法没有被调用,因为没有显示日志。ServerCallWorker()方法也是同样的情况。请问有人能指出我哪里做错了吗?
谢谢, Arindam.

在调用getLocationUpdate()时,请确保设备已连接到互联网。否则,将安排ServerCallWorker()在设备连接到互联网时被调用。 - M.R.Javid
1
@ArindamMukherjee,你解决了这个问题吗?我也遇到了同样的问题。 - Vivek Pratap Singh
1
我也遇到了同样的问题,你找到解决方案了吗? - Nadeem Shukoor
1
有任何更新吗?我也遇到了这个问题。它并不总是发生,但有时确实会出现。 - Praveen Singh
你找到解决方案了吗? - Andrey Solera
显示剩余2条评论
1个回答

0

也许不是你的情况,但当你使用 setInputData() 设置数据时,如果负载/数据对象太大,doWork() 可能不会被调用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接