0

我在一个警报中有 2 个警报我正在启动作业调度程序服务,该服务每 30 分钟发送一次通知,在第二个警报时我想取消这个预定的作业服务,我也在主线程上发送通知我没有创建单独的线程在工作服务中,这是我的代码:

这是我的 jobinfo 对象,当开始警报的广播触发时我正在执行此方法

public static void Scheduler(Context context){

     float duration = NotificationUtills.NotificationCounter();

     ComponentName componentName = 
     new ComponentName(context , ClsJobService.class);

    JobInfo.Builder builder =  new JobInfo.Builder(0, componentName)
            .setPeriodic(5000);


    JobScheduler jobScheduler = 
    (JobScheduler) context.getSystemService (Context.JOB_SCHEDULER_SERVICE);

    jobScheduler.schedule(builder.build());
}

这是工作服务

public class ClsJobService extends JobService {

@Override
public boolean onStartJob(JobParameters params) {

    //logic for building and sending notification
    NotificationUtills.notificationBuilder(getApplicationContext());
    return true;
}

@Override
public boolean onStopJob(JobParameters params) {
    return false;
}
}

不创建单独的线程可以吗?

另外,当第二个警报响起时,我如何取消这个预定的工作?

4

1 回答 1

0

不创建单独的线程可以吗?

只要您的Notification构建逻辑不执行任何可能会损害应用程序响应能力的耗时操作。

另外,当第二个警报响起时,我如何取消这个预定的工作?

您可以调用 的cancel()方法JobScheduler。它将作业 ID 作为参数。这必须与您传递给JobInfo.Builder构造函数的作业 ID 相同(0在您的代码中)。

于 2017-06-24T05:12:26.127 回答