Firebase Job Dispatcher无法在OREO设备上调度作业

时间:2018-11-10 16:45:23

标签: android job-scheduling firebase-job-dispatcher

我有一个firebase作业调度程序,该调度程序计划在网络发生变化时运行,该作业在棉花糖设备(23 API级别)上可以正常运行,但是运行时使用的相同代码不在oreo设备(26 API级别)上调度)

这是我的工作服务代码:

public class MyJobService extends JobService {


@Override
public boolean onStartJob(JobParameters job) {

    Log.d("Executing","Job");
    Realm realm = Realm.getDefaultInstance();

    RealmResults<JsontoSend> realmResults = realm.where(JsontoSend.class).findAll();
   if(!realmResults.isEmpty()) {
        for (JsontoSend jsontoSend : realmResults) {
            final Intent intent = new Intent(getApplicationContext(), PostUploadIntentService.class);
            intent.putExtra("object", jsontoSend.getJson());
            new Thread(new Runnable() {
                @Override
                public void run() {
                    startService(intent);
                }
            }).run();
        }
    }


    return true;
}

@Override
public boolean onStopJob(JobParameters job) {
        Log.d("instopjob","cancelled");
        return true;

    }
}

这是我创建作业的代码:

 synchronized  public static void schedule(@NonNull final Context context){
    if(sInitialized)
        return;

    Driver driver=new GooglePlayDriver(context);
    FirebaseJobDispatcher dispatcher=new FirebaseJobDispatcher(driver);

    Job myJob = dispatcher.newJobBuilder()
            .setService(MyJobService.class)
            .setTag(JOB_TAG)
            .setRecurring(true)
            .setTrigger(Trigger.executionWindow(5, 60))
            .setLifetime(Lifetime.FOREVER)
            .setConstraints(Constraint.ON_ANY_NETWORK)
            .setReplaceCurrent(false)
            .setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL)
            .build();

    dispatcher.schedule(myJob);
    sInitialized=true;

}

我想做的是如果我没有Internet连接,然后将数据存储在本地数据库中,然后每当我连接到Internet并与服务器同步数据时就运行一个作业。以上代码在棉花糖设备上运行良好但工作从未在oreo设备上安排。

1 个答案:

答案 0 :(得分:0)

这里的问题可能是因为您使用的GooglePlayDriver依赖于要在设备上显示的google play服务。如果服务不可用,则不会安排作业。 因此,如果您定位到高于5.0的设备(在大多数情况下是这样),则必须使用自棒棒糖以来内置的android JobScheduler