【问题标题】:FirebaseJobDispatcher dispatcher not triggering (SimpleJobService)FirebaseJobDispatcher 调度程序未触发(SimpleJobService)
【发布时间】:2020-08-05 14:21:13
【问题描述】:

我有一个作业应该通过网络操作更新 sqlitedatabase,该操作在 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>

【问题讨论】:

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


    【解决方案1】:
    job.gettag().equals(PERIODIC_JOB_TAG)
    

    总是返回 false 导致周期性作业没有被执行。我不确定为什么它不起作用,因为我在 JobParameters documentation 中找不到 gettag 函数

    【讨论】:

      猜你喜欢
      • 2019-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-18
      • 1970-01-01
      相关资源
      最近更新 更多