【问题标题】:Firebase Job Dispatcher Not SchedulingFirebase 作业调度程序未安排
【发布时间】:2018-05-27 16:10:10
【问题描述】:

我为此查看了几个答案,但没有得到任何结果。有谁知道为什么我的 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;
}}

【问题讨论】:

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


    【解决方案1】:

    在 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;
        }}
    }
    

    【讨论】:

      【解决方案2】:

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

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

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

      然后我放了: 实施 'com.firebase:firebase-jobdispatcher:0.8.5'

      可能更新的也一样。

      【讨论】:

        猜你喜欢
        • 2017-03-14
        • 1970-01-01
        • 2018-04-25
        • 1970-01-01
        • 2017-06-18
        • 2019-11-24
        • 1970-01-01
        • 2017-11-08
        • 1970-01-01
        相关资源
        最近更新 更多