Android O的后台服务

时间:2017-08-25 04:49:00

标签: android android-8.0-oreo

对于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;
    }
}

感谢。

0 个答案:

没有答案