对于android O,引入了后台服务限制。我了解了firebase jobdispatcher,它可以像在旧版本上一样运行在android O上。但是当我在android O上运行这个代码时,它什么也没有响应,似乎没有在后台运行的作业调度。旧版本中相同的代码运行顺畅。有人可以告诉我在android O中firebase jobdispatcher的新行为。此外,后台服务如何在android O中运行。
我附上一个简单的代码,我尝试生成通知。我知道通知渠道,当我调用方法 NotificationUtils.workerReminder(context)时会生成通知,但是当我在Service类中运行时,没有任何事情发生,并且在android O中没有生成通知。
这是调度代码。
synchronized public static void remindJob(Context context) {
if (isInitialized) return;
Driver driver = new GooglePlayDriver(context);
FirebaseJobDispatcher jobDispatcher = new FirebaseJobDispatcher(driver);
Job job = jobDispatcher.newJobBuilder()
.setService(Service.class)
.setLifetime(Lifetime.FOREVER)
.setConstraints(Constraint.ON_ANY_NETWORK)
.setRecurring(true)
.setTrigger(Trigger.executionWindow(60, 120))
.setReplaceCurrent(true)
.setTag(JOB_TAG)
.build();
Log.d(Reminder.class.getSimpleName(), "after build the job");
jobDispatcher.schedule(job);
isInitialized = true;
}
这是服务类
public class Service extends JobService {
@Override
public boolean onStartJob(final JobParameters job) {
backgroundTask = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... voids) {
Context context = Service.this;
NotificationUtils.workerReminder(context);
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
jobFinished(job, false);
}
};
backgroundTask.execute();
return true;
}
@Override
public boolean onStopJob(JobParameters job) {
if (backgroundTask != null) backgroundTask.cancel(true);
return true;
}
}
感谢。