我看了几个答案,但一无所获。有谁知道为什么我的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;
}}
在 AndroidManifest 中注册权限.xml:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
在 Android 清单中添加服务声明.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;
}}
}
除了下面的所有其他答案外,不要忘记使用更新的firebase-jobdispatcher lib。
就我而言,请求中存在具有相同代码结构的类似问题,并且在实现下面jantursky的建议后,通过将build.gradle中导入的firebase lib版本更改为最新版本来解决。
我有 : 实现 'com.firebase:firebase-jobdispatcher:0.5.0'
然后我把: 实现 'com.firebase:firebase-jobdispatcher:0.8.5'
可能最近的一个会很好。