Java Firebase JobDispatcher在1小时后停止工作

Java Firebase JobDispatcher在1小时后停止工作,java,android,Java,Android,在API>21上,当我的手机被锁定时,此服务将停止工作(当我唤醒手机时,服务将开始工作)。我就是这么做的: public class JobDispacherService extends JobService { private Preferences prefs = null; public static final String GCM_ONEOFF_TAG = "oneoff|[0,0]"; public static final String GCM_REPE

在API>21上,当我的手机被锁定时,此服务将停止工作(当我唤醒手机时,服务将开始工作)。我就是这么做的:

public class JobDispacherService extends JobService {

    private Preferences prefs = null;
    public static final String GCM_ONEOFF_TAG = "oneoff|[0,0]";
    public static final String GCM_REPEAT_TAG = "komunalRepeat|[7200,1800]";
    private static final String TAG = JobDispacherService.class.getSimpleName();
    private UplaudPossitionTask uplaudPossitionTask;

    @Override
    public boolean onStartJob(@NonNull JobParameters job) {

        uplaudPossitionTask = new UplaudPossitionTask() {
            @Override
            protected void onPostExecute(Void aVoid) {
                super.onPostExecute(aVoid);
                jobFinished(job, false);
            }
        };
        uplaudPossitionTask.execute();
        return false; // Answers the question: "Is there still work going on?"
    }


    @Override
    public boolean onStopJob(JobParameters job) {
        return true; // Answers the question: "Should this job be retried?"
    }

    private class UplaudPossitionTask extends AsyncTask<Void, Void, Void> {

        @Override
        protected Void doInBackground(Void... params) {

            uploadPosition();
            return null;
        }
    }

}
我想一直重复这一次,我不知道为什么当我的手机锁定超过1小时时,这项服务停止工作

工作经理:

public static void refreshCouponPeriodicWork() {

    //define constraints
    Constraints myConstraints = new Constraints.Builder()
            .setRequiresDeviceIdle(false)
            .setRequiresCharging(false)
            .setRequiredNetworkType(NetworkType.CONNECTED)
            .setRequiresBatteryNotLow(true)
            .setRequiresStorageNotLow(true)
            .build();

    Data source = new Data.Builder()
            .putString("workType", "PeriodicTime")
            .build();

    PeriodicWorkRequest refreshCpnWork =
            new PeriodicWorkRequest.Builder(RefreshLatestCouponWorker.class, 10, TimeUnit.HOURS,30, TimeUnit.SECONDS)
                    .setConstraints(myConstraints)
                    .setInputData(source)
                    .build();

    WorkManager.getInstance().enqueue(refreshCpnWork);
}


public class RefreshLatestCouponWorker extends Worker {

    private Preferences prefs = null;


    public RefreshLatestCouponWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
        super(context, workerParams);
    }

    @NonNull
    @Override
    public Worker.Result doWork() {
        //read input argument
        String workType = getInputData().getString("workType");
        Log.i("refresh cpn work", "type of work request: " + workType);

        uploadPosition();
        //sending work status to caller
        return success();
    }

}

我是为work manager这样做的,但任务只运行一次,并且从不重复

我建议您阅读有关WorkManager的内容,这将是您的正确解决方案。WorkManager API可以轻松安排可延迟的异步任务,即使应用程序退出或设备重新启动,这些任务也会运行。您可以定义具有指定时间间隔和设备状态的定期请求。如果您发现实现困难,我可以帮助您

好的,我试着找到这个,我编辑我的帖子。我创建了一个workManager,但任务只运行一次,从未重复
public static void refreshCouponPeriodicWork() {

    //define constraints
    Constraints myConstraints = new Constraints.Builder()
            .setRequiresDeviceIdle(false)
            .setRequiresCharging(false)
            .setRequiredNetworkType(NetworkType.CONNECTED)
            .setRequiresBatteryNotLow(true)
            .setRequiresStorageNotLow(true)
            .build();

    Data source = new Data.Builder()
            .putString("workType", "PeriodicTime")
            .build();

    PeriodicWorkRequest refreshCpnWork =
            new PeriodicWorkRequest.Builder(RefreshLatestCouponWorker.class, 10, TimeUnit.HOURS,30, TimeUnit.SECONDS)
                    .setConstraints(myConstraints)
                    .setInputData(source)
                    .build();

    WorkManager.getInstance().enqueue(refreshCpnWork);
}


public class RefreshLatestCouponWorker extends Worker {

    private Preferences prefs = null;


    public RefreshLatestCouponWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
        super(context, workerParams);
    }

    @NonNull
    @Override
    public Worker.Result doWork() {
        //read input argument
        String workType = getInputData().getString("workType");
        Log.i("refresh cpn work", "type of work request: " + workType);

        uploadPosition();
        //sending work status to caller
        return success();
    }

}