首页 > 解决方案 > 带有 FirebaseJobDispatcher 的 Android 8.0 后台计划任务

问题描述

我有一个应用程序,只要有互联网连接,它就会使用 FirebaseJobDispatcher 运行计划任务。它在 Nougat 上运行良好,但在应用后台执行限制后,我不知道如何在 Oreo 8.0 中修复它。 https://developer.android.com/about/versions/oreo/background 我的日程安排代码是这样的

synchronized public static void scheduleReminder(@NonNull final Context context) {
    if (sInitialized) return;
    Driver driver = new GooglePlayDriver(context);
    FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(driver);
    Job constraintReminderJob = dispatcher.newJobBuilder()
            .setService(MyService.class)
            .setTag(REMINDER_JOB_TAG)
            .setRecurring(true)
            .setConstraints(Constraint.ON_ANY_NETWORK)
            .setLifetime(Lifetime.FOREVER)
            .setTrigger(Trigger.executionWindow(0,
                    REMINDER_INTERVAL_SECONDS + SYNC_FLEXTIME_SECONDS
                    ))
            .setReplaceCurrent(true)
         .build();
    dispatcher.schedule(constraintReminderJob);
    sInitialized = true;
}

而 MyService.class 是

public class MyService extends JobService {
private AsyncTask mBackgroundTask;
@Override
public boolean onStartJob(final JobParameters jobParameters) {
    mBackgroundTask = new AsyncTask() {
        @Override
        protected Object doInBackground(Object[] params) {
             HttpsURLConnection urlConnection =(HttpsURLConnection) url.openConnection();
   //etc
        }

        @Override
        protected void onPostExecute(Object o) {
            jobFinished(jobParameters, false);
        }
    };
    mBackgroundTask.execute();

    return true;
}
@Override
public boolean onStopJob(JobParameters jobParameters) {
    if (mBackgroundTask != null) mBackgroundTask.cancel(true);
    return true;
}
}

我没有在清单中添加任何在较低级别 API (<26) 中工作的特殊许可。

标签: androidbackgroundscheduled-tasksfirebase-job-dispatcher

解决方案


推荐阅读