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()
的值中指示的频率频繁出现。您知道,它似乎工作正常,所以您是对的。谢谢你的帮助!那么,如果我想改变周期性工作的频率呢?如果我不能取消一项工作,也不能重新安排它(因为它会重复),我如何使它工作?