Диспетчер FirebaseJobDispatcher не запускается (SimpleJobService) - PullRequest
0 голосов
/ 05 августа 2020

У меня есть задание, которое должно обновлять базу данных sqlited через сетевую операцию, которая наблюдается в recyclerview, но, похоже, она не работает. Я оставил приложение открытым и закрытым, чтобы проверить это, и оба они не работают. Любой ввод приветствуется

EarthquakeUpdateJobService. java

public class EarthquakeUpdateJobService extends SimpleJobService {

    private static final String TAG = "EarthquakeUpdateJob ";
    private static final String UPDATE_JOB_TAG = "update_job";
    private static final String PERIODIC_JOB_TAG = "periodic_job";

    public static void scheduleUpdateJob(Context context) {
        FirebaseJobDispatcher jobDispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(context));

        jobDispatcher.schedule(jobDispatcher.newJobBuilder().setTag(UPDATE_JOB_TAG).setService(EarthquakeUpdateJobService.class).setConstraints(Constraint.ON_ANY_NETWORK).build());
    }

    @Override
    public int onRunJob(JobParameters job) {

        // connect to internet, parse xml, update sqlite table

        scheduleNextUpdate(this, job);
        return RESULT_SUCCESS;

    }

    private void scheduleNextUpdate(Context context, JobParameters job) {
        if(job.getTag().equals(PERIODIC_JOB_TAG)) {
            SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
            int updateFreq = Integer.parseInt(sharedPreferences.getString(PreferenceActivity.PREF_UPDATE_FREQ, "60"));
            boolean autoUpdateChecked = sharedPreferences.getBoolean(PreferenceActivity.PREF_AUTO_UPDATE, false);

            if(autoUpdateChecked) {
                FirebaseJobDispatcher jobDispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(context));
                jobDispatcher.schedule(jobDispatcher.newJobBuilder().setTag(PERIODIC_JOB_TAG).setService(EarthquakeUpdateJobService.class).setConstraints(Constraint.ON_ANY_NETWORK).setReplaceCurrent(true).setRecurring(true).setTrigger(Trigger.executionWindow(updateFreq*60 /2, updateFreq * 60)).setLifetime(Lifetime.FOREVER).build());
            }
        }
    }

}

androidManifest. xml

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

1 Ответ

0 голосов
/ 05 августа 2020
job.gettag().equals(PERIODIC_JOB_TAG)

всегда возвращает false, в результате чего задание periodi c не выполняется. Я не уверен, почему это не работает, поскольку я не могу найти функцию gettag в документации JobParameters

...