1

为了让事情从一开始就清楚,这里是应用程序所需的流程:

选择带有日/小时/分钟的精确日期 ->Job创建一个新日期并安排时间FirebaseJobDispatcher->job在正确的日期准确触发,并定期运行(例如,周期为 1-2 秒) 定义是否job需要的代码再次运行。如果不需要再次运行,则确定结束,否则,重新运行。此外,job应该有一个“持续时间”(通常为 60 秒),无论job.

到目前为止,我对三件事感到困惑:

  • 触发窗口似乎完全不可靠,job大约在它想要的时候运行
  • 我应该使用FirebaseJobDispatcher#setRecurring还是jobFinished(job, true);在服务内部?
  • 有时,setRecurring(boolean)设置为false, 以及jobFinished(job, false);, 作业仍然运行

也许我应该AlarmManager改用?但它似乎是新的方式 FirebaseJobDispatche,所以我不知道。

这是一些代码

服务:

@Override
public boolean onStartJob(final JobParameters job) {

    new Thread(new Runnable() {
        @Override
        public void run() {
            simulateBackgroundTask(job);
        }
    }).start();

    return true;
}

private void simulateBackgroundTask(JobParameters job) {
    try {

        Log.d(TAG, "completeJob: " + "jobStarted --------------------");

        //request server or db
        Thread.sleep(2000);

        Log.d(TAG, "completeJob: " + "jobFinished --------------------");

        //shoudRunAgain is from the result of the request
        if(shouldRunAgain)
            jobFinished(job, true);
        else
            jobFinished(job, false);

    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}


@Override
public boolean onStopJob(JobParameters job) {
    return false;
}

活动

FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(App.getContext()));

    Job job = dispatcher.newJobBuilder()
            .setLifetime(Lifetime.FOREVER)
            .setService(SearchService.class)
            .setTag("SearchService")
            .setRecurring(true)
            .setTrigger(Trigger.executionWindow(startDate,endDate))
            .setConstraints(Constraint.ON_ANY_NETWORK)
            .build();

    dispatcher.mustSchedule(job);

欢迎任何建议或解决方案,谢谢

4

0 回答 0