android - 带有 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) 中工作的特殊许可。
解决方案
推荐阅读
- c# - API 混合了来自不同设备的数据
- angular - 如何在 Angular 6 中翻译动态属性“[attr]”?
- php - 在 PHP 中显示 SOAP API 结果
- mysql - MYSQL 查询上的 INDEX
- java - OpenAM OpenDJ dockerisation 问题:无法使用旧数据源重新部署
- sql - 使用oracle在一个表中根据最大值连接三个表
- css - CSS:在行固定位置设置3个项目列表
- angular - 将 FormControl 传递给子组件 - 未指定名称的表单控件没有值访问器
- html - .htaccess 中的 Access-Control-Allow-Origin 在子目录中不起作用
- docker - 为什么 docker 为所有容器提供不同范围的 IP 地址以及如何将其设为默认值?