Android 定期作业服务在每个期间运行多次

Android 定期作业服务在每个期间运行多次,android,android-jobscheduler,periodic-task,jobservice,Android,Android Jobscheduler,Periodic Task,Jobservice,我的JobService在每个周期运行一次时遇到了一些问题 这是我简单而愚蠢的工作服务的代码: public class UpdateInfoJobService extends JobService { public final static int UPDATE_TRACKING_INFO_JOB_ID = 741; @Override public boolean onStartJob(JobParameters jobParameters) {

我的
JobService
在每个周期运行一次时遇到了一些问题

这是我简单而愚蠢的工作服务的代码:

public class UpdateInfoJobService extends JobService {

    public final static int UPDATE_TRACKING_INFO_JOB_ID = 741;

    @Override
    public boolean onStartJob(JobParameters jobParameters) {
        notifyNewStatus("TEST");
        jobFinished(jobParameters, false);
        return false;
    }

    @Override
    public boolean onStopJob(JobParameters jobParameters) {
        scheduleNextUpdate(this);
        return false;
    }

    public static void scheduleNextUpdate(Context mContext) {

        boolean runJob = true;

        if (runJob) {
            ComponentName serviceComponent = new ComponentName(mContext, UpdateInfoJobService.class);
            JobScheduler jobScheduler = (JobScheduler) mContext.getSystemService(Context.JOB_SCHEDULER_SERVICE);

            JobInfo.Builder builder = new JobInfo.Builder(UPDATE_TRACKING_INFO_JOB_ID, serviceComponent);
            builder.setPersisted(true);
            builder.setPeriodic(30*60*1000); //every 30min

            if (jobScheduler != null)
                jobScheduler.schedule(builder.build());
        }

    }

    private void notifyNewStatus (String s) {


        // build notification
        Notification n  = new Notification.Builder(this)
                .setContentTitle(s + " :: " + Calendar.getInstance().getTime())
                .build();

        NotificationManager notificationManager =
                (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        final int notificationId = (int)System.currentTimeMillis();

        Log.d("UpdateInfoJob", "New notification with ID=" + notificationId);

        if (notificationManager != null)
            notificationManager.notify(getApplication().getPackageName(), notificationId, n);
    }
}
我在logcat中得到的输出:

01-14 16:33:22.591 19733-19733/com.android.myapp D/UpdateInfoJob: New notification with ID=240532138
01-14 16:43:57.831 19733-19733/com.android.myapp D/UpdateInfoJob: New notification with ID=241167372
01-14 16:49:35.102 19733-19733/com.android.myapp D/UpdateInfoJob: New notification with ID=241504645
01-14 16:49:40.032 19733-19733/com.android.myapp D/UpdateInfoJob: New notification with ID=241509577
01-14 16:57:12.982 19733-19733/com.android.myapp D/UpdateInfoJob: New notification with ID=241962532
01-14 17:05:15.197 19733-19733/com.android.myapp D/UpdateInfoJob: New notification with ID=242444743
01-14 17:05:15.327 19733-19733/com.android.myapp D/UpdateInfoJob: New notification with ID=242444876
01-14 17:10:15.507 19733-19733/com.android.myapp D/UpdateInfoJob: New notification with ID=242745058
01-14 17:15:15.847 19733-19733/com.android.myapp D/UpdateInfoJob: New notification with ID=243045395
01-14 17:20:00.277 19733-19733/com.android.myapp D/UpdateInfoJob: New notification with ID=243329827
01-14 17:20:45.007 19733-19733/com.android.myapp D/UpdateInfoJob: New notification with ID=243374556
01-14 17:25:16.077 19733-19733/com.android.myapp D/UpdateInfoJob: New notification with ID=243645621
调试日志每5/10分钟发送一次,而不是按应有的30分钟发送一次。为什么会这样?我做错了什么


谢谢你的帮助

为什么要在
onStopJob()
中重新安排定期作业?我认为应该在下次启动时重新安排。只做一次就够了吗?周期性的工作就是周期性的。它将按照您在
setPeriodic()
的值中指示的频率频繁出现。您知道,它似乎工作正常,所以您是对的。谢谢你的帮助!那么,如果我想改变周期性工作的频率呢?如果我不能取消一项工作,也不能重新安排它(因为它会重复),我如何使它工作?