在上一篇博客中我们介绍了怎样让程序一开机就运行
那么,根据我们上次的思路“开机运行一个定时器,定时执行某项服务”,来实现定期执行上传任务
我们需要的是AlarmManager
alarmmanager的作用类似于定时器,它可以让android在未来某一时刻运行某个程序,他的好处在于哪怕启动他的activity现在是处于inactive 状态,它仍然会精准的执行,除非你重启设备。
alarmManager 可以支持很多中触发形式,有单次,有循环,有自定义循环三种模式(想想我们闹铃的三种模式),我们可以在API上看到这些信息
set(int type, long triggerAtTime, PendingIntent operation)
Schedule an alarm.
setInexactRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)
Schedule a repeating alarm that has inexact trigger time requirements; for example, an alarm that repeats every hour, but not necessarily at the top of every hour.
setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)
Schedule a repeating alarm.
我们这里使用的是循环 也就是setRepeating
说下这个参数
首先type 是代表计时器的几种不同的计时方式,他们包含ELAPSED_REALTIME、ELAPSED_REALTIME_WAKEUP、RTC、以及RTC_WAKEUP
Elapse 系列是从开机开始算起,包括机器休眠时间 而rtc ,指的是当前时间,之后加没加wakeup 的参数修饰的意思是 到达时间后是否在到达时间后唤醒设备处理(有wakeup),还是等待用户wakeup机器后运行(无walkup)
后面的两个triggerAtTime和interval 代表的是起始时间和步长,最后一个是 operation 你需要启动的intent 在这里注意一下,此处的pendingintent 是预备使用的intent
ok,放代码
PendingIntent mAlarmSender = PendingIntent.getService(context, 0, new Intent( context, UploadImgService.class), 0); long firstTime = SystemClock.elapsedRealtime(); AlarmManager am = (AlarmManager) context .getSystemService(context.ALARM_SERVICE); am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 10 * 6000, mAlarmSender);
注意一下,这个intent 就是我们要运行的服务,
这个含义就是每隔1min运行一次uploadImgService 的这个服务
下次我们着重讲uploadImgService 的实现