У меня есть приложение, которое при наличии подключения к Интернету запускает запланированное задание с помощью 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). </p>