【问题标题】:How to perform background recurring job using firebase job dispatcher如何使用 Firebase 作业调度程序执行后台重复作业
【发布时间】:2017-09-10 17:21:43
【问题描述】:

我已将作业配置如下:

FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(this));
    Job myJob = dispatcher.newJobBuilder()
            .setService(InfoJobService.class)
            .setRecurring(true)
            .setTrigger(Trigger.executionWindow(0, 10))
            .setLifetime(Lifetime.FOREVER)
            .setTag("data")
            .setReplaceCurrent(true)
            .setConstraints(Constraint.ON_ANY_NETWORK)
            .build();
    dispatcher.mustSchedule(myJob);

在 JobService 类中,我修改了 onstart 和 onstop 方法,如下所示:

 @Override
public boolean onStartJob(JobParameters job) {
    new Thread(new Runnable() {
        @Override
        public void run() {
            uploadDatToFirebase();
        }
    }).start();
    return true;
}
@Override
public boolean onStopJob(JobParameters job) {
    return true;
}

但工作调度员只工作一次,不会重复出现。我的问题类似于this question 但是那里没有给出解决方案,所以我不得不再次询问。

【问题讨论】:

  • 有解决办法吗?
  • @tejshah 我添加了对我有用的解决方案作为下面的答案。

标签: android firebase-job-dispatcher


【解决方案1】:

我不知道解决方案是否适合每种情况,但它对我有用。 工作服务:

@Override
public boolean onStartJob(final JobParameters job) {
    new Thread(new Runnable() {
        @Override
        public void run() {
            uploadDatToFirebase(job);
        }
    }).start();

    return true;
}



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

private void uploadDatToFirebase(final JobParameters parameters) {
    try{
        doSomething();
        Thread.sleep(2000);
    }catch (InterruptedException e) {
        e.printStackTrace();
    } finally {
        jobFinished(parameters, true);
    }
}

活动中:

 FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(this));

    Job myJob = dispatcher.newJobBuilder()
            .setService(InfoJobService.class)
            .setTag("InfoJobService")
            .setRecurring(true)
            .setTrigger(Trigger.executionWindow(30, 60))
            .setLifetime(Lifetime.FOREVER)
            .setReplaceCurrent(false)
            .setConstraints(Constraint.ON_ANY_NETWORK, Constraint.DEVICE_CHARGING)
            .setRetryStrategy(RetryStrategy.DEFAULT_LINEAR)
            .build();

    dispatcher.mustSchedule(myJob);

【讨论】:

  • :-谢谢,但它在联想设备中不起作用。你能指导那个解决方案吗?
猜你喜欢
  • 2017-03-14
  • 2017-02-17
  • 1970-01-01
  • 1970-01-01
  • 2018-06-08
  • 2017-06-18
  • 2017-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多