// 启动定时器
// 1.handler实现定时器
handler.removeMessages(SCHEDULE_CODE);
handler.sendEmptyMessage(SCHEDULE_CODE);
// 2.ScheduledThreadPoolExecutor
ScheduledUtils.getInstance(getApplicationContext()).doSchedule(new Run(getApplicationContext(), "2.ScheduledThreadPoolExecutor"), SHEDULED_TIME);
// 3.alarm
ScheduledUtils.getInstance(getApplicationContext()).startAlarmBroadcast(ScheduledReceiver.class, "org.moziqi.sheduled.action", SCHEDULE_CODE, SHEDULED_TIME);
// 4. jobService
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
JobScheduler scheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
ComponentName componentName = new ComponentName(this, SheduledJobService.class);
JobInfo.Builder builder = new JobInfo.Builder(SCHEDULE_CODE, componentName);
builder.setPeriodic(SHEDULED_TIME);
scheduler.schedule(builder.build());
}
源码在这里https://github.com/moziqi/ScheduledThread
放了一天的log,测试手机是小米6.0系统,看完log,发现 alarm和jobservice好坑
[2016-12-11 12:14:55] mo:ScheduledService.onCreate(L:51) --> ScheduledService.onCreate
[2016-12-11 12:14:55] mo:Run.run(L:19) --> 2.ScheduledThreadPoolExecutor
[2016-12-11 12:14:55] mo:Run.run(L:19) --> 1.handler
[2016-12-11 12:14:55] mo:AlarmService.onCreate(L:17) --> AlarmService.onCreate
[2016-12-11 12:14:55] mo:Run.run(L:19) --> 3.alarm
[2016-12-11 12:24:46] mo:SheduledJobService.onCreate(L:18) --> SheduledJobService.onCreate
[2016-12-11 12:24:46] mo:Run.run(L:19) --> 4. jobService
[2016-12-11 12:24:46] mo:SheduledJobService.onDestroy(L:24) --> SheduledJobService.onDestroy
[2016-12-11 13:14:55] mo:Run.run(L:19) --> 2.ScheduledThreadPoolExecutor
[2016-12-11 13:14:55] mo:Run.run(L:19) --> 1.handler
[2016-12-11 13:16:01] mo:SheduledJobService.onCreate(L:18) --> SheduledJobService.onCreate
[2016-12-11 13:16:01] mo:Run.run(L:19) --> 4. jobService
[2016-12-11 13:16:01] mo:Run.run(L:19) --> 3.alarm
[2016-12-11 13:16:01] mo:SheduledJobService.onDestroy(L:24) --> SheduledJobService.onDestroy
[2016-12-11 14:14:55] mo:Run.run(L:19) --> 2.ScheduledThreadPoolExecutor
[2016-12-11 14:14:55] mo:Run.run(L:19) --> 1.handler
[2016-12-11 14:53:12] mo:Run.run(L:19) --> 3.alarm
[2016-12-11 14:53:12] mo:SheduledJobService.onCreate(L:18) --> SheduledJobService.onCreate
[2016-12-11 14:53:12] mo:Run.run(L:19) --> 4. jobService
[2016-12-11 14:53:12] mo:SheduledJobService.onDestroy(L:24) --> SheduledJobService.onDestroy
[2016-12-11 15:14:55] mo:Run.run(L:19) --> 2.ScheduledThreadPoolExecutor
[2016-12-11 15:14:55] mo:Run.run(L:19) --> 1.handler
[2016-12-11 16:14:55] mo:Run.run(L:19) --> 2.ScheduledThreadPoolExecutor
[2016-12-11 16:14:55] mo:Run.run(L:19) --> 1.handler
[2016-12-11 16:56:45] mo:Run.run(L:19) --> 3.alarm
[2016-12-11 16:56:47] mo:SheduledJobService.onCreate(L:18) --> SheduledJobService.onCreate
[2016-12-11 16:56:47] mo:Run.run(L:19) --> 4. jobService
[2016-12-11 16:56:47] mo:SheduledJobService.onDestroy(L:24) --> SheduledJobService.onDestroy
[2016-12-11 16:59:46] mo:SheduledJobService.onCreate(L:18) --> SheduledJobService.onCreate
[2016-12-11 16:59:46] mo:Run.run(L:19) --> 4. jobService
[2016-12-11 16:59:46] mo:SheduledJobService.onDestroy(L:24) --> SheduledJobService.onDestroy
[2016-12-11 17:14:55] mo:Run.run(L:19) --> 2.ScheduledThreadPoolExecutor
[2016-12-11 17:14:55] mo:Run.run(L:19) --> 1.handler
[2016-12-11 17:59:23] mo:Run.run(L:19) --> 3.alarm
[2016-12-11 18:01:00] mo:SheduledJobService.onCreate(L:18) --> SheduledJobService.onCreate
[2016-12-11 18:01:00] mo:Run.run(L:19) --> 4. jobService
[2016-12-11 18:01:00] mo:SheduledJobService.onDestroy(L:24) --> SheduledJobService.onDestroy
2016-12-12,在5.x以上引入了doze模式,alarm代码已经更新