Firebase作业调度程序未调度

时间:2018-05-27 16:10:10

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

我看了几个答案但是没有得到任何答案。有谁知道为什么我的FirebaseDispatcher没有执行?我设置了1到5秒之间的触发窗口,看它是否有效。 我的应用程序启动,并从实用程序类调用此方法:

private static void scheduleFirebaseJobSync(@NonNull final Context context){

    try {
        com.firebase.jobdispatcher.Driver driver = new GooglePlayDriver(context);
        FirebaseJobDispatcher firebaseJobDispatcher = new FirebaseJobDispatcher(driver);

        Job syncJob = firebaseJobDispatcher.newJobBuilder()
                .setService(FireBaseJobService.class)
                .setTag(WEATHER_SYNC_TAG)
                .setConstraints(Constraint.ON_ANY_NETWORK)
                .setLifetime(Lifetime.FOREVER)
                .setRecurring(true)
                .setTrigger(Trigger.executionWindow(1,5))
                .setReplaceCurrent(true)
                .build();
        firebaseJobDispatcher.schedule(syncJob);
    }

以下是名为的FirebaseJobService类:

public class FireBaseJobService extends JobService {
private AsyncTask<Void,Void,Void> fetchMovieDate;

@Override
public boolean onStartJob(final JobParameters job) {
    fetchMovieDate = new AsyncTask<Void, Void, Void>() {
        @Override
        protected Void doInBackground(Void... params) {

            Context context = getApplicationContext();
            WeatherSyncTask.syncWeatherDB(context);
            jobFinished(job,false);
            Log.d("FIREBASEJOB", "IN FIRE BASE JOB FINISHED");
            return null;
        }
        @Override
        protected void onPostExecute(Void aVoid) {
            jobFinished(job,false);
        }
    };
    fetchMovieDate.execute();
    return true;
}

@Override
public boolean onStopJob(JobParameters job) {
    if (fetchMovieDate!=null){
        fetchMovieDate.cancel(true);
    }

    return true;
}}

2 个答案:

答案 0 :(得分:0)

在AndroidManifest.xml中注册权限:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

在AndroidManifest.xml中添加服务声明:

<service
    android:exported="false"
    android:name=".FireBaseJobService ">
    <intent-filter>
        <action android:name="com.firebase.jobdispatcher.ACTION_EXECUTE"/>
    </intent-filter>
</service>

使用以下两个选项之一发送作业:

firebaseJobDispatcher.schedule(syncJob);
firebaseJobDispatcher.mustSchedule(syncJob);

JobService中的内容是:

public class FireBaseJobService extends JobService {

    @Override
    public boolean onStartJob(final JobParameters job) {
        WeatherSyncTask.syncWeatherDB(getApplicationContext());
        return false;
    }

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

答案 1 :(得分:0)

除了以下所有其他答案外,别忘了使用更新的firebase-jobdispatcher lib。

在我的情况下,请求中具有相同代码结构的类似问题,并在实施了下面的jantursky的建议之后,通过将build.gradle中导入的firebase lib版本更改为最新版本来解决。

我有: 实施'com.firebase:firebase-jobdispatcher:0.5.0'

然后我输入: 实施'com.firebase:firebase-jobdispatcher:0.8.5'

更新的版本可能会一样。