android定时任务实现

时间:2022-01-25 07:49:26

android的系统定时器功能由AlarmManager类提供

AlarmManager提供了两个接口供使用,分别是单次和循环定时功能,如下:AlarmManager提供了两个接口供使用,分别是单次和循环定时功能,如下:

public void set(int type, long triggerAtMillis, PendingIntent operation);
public void setRepeating(int type, long triggerAtMillis, long intervalMillis, PendingIntent operation);
AlarmManager提供了4中类型定时功能,对应与上面的参数type,分别为

RTC_WAKEUP和RTC:都是使用UTC时间(即System.currentTimeMillis()获取到的时间)。区别在于RTC_WAKEUP可以唤醒系统,即手机锁屏休眠时也能够收到RTC_WAKEUP定时闹钟事件;而RTC不具有唤醒功能,闹钟到期事件只会在手机下次唤醒后才会发出,存在很大的延时性。

ELAPSED_REALTIME_WAKEUP和ELAPSED_REALTIME:都是使用系统时钟,即手机从开机开始计算的毫秒数(SystemClock.elapsedRealtime())。唤醒功能同上。

参数triggerAtMillis:下次定时闹钟到期时间

参数intervalMillis:循环定时闹钟的间隔时间

参数PendingIntent operation:定时闹钟到期操作,可以发广播、启动Activity或Service,广播用的最多。


如果定时闹钟到期操作较为复杂、耗时,需要使用后台service。防止Broadcast ANR。后台Service需要将耗时操作放入工作线程,并通过UI主线程Handler更新UI相关。

此时切忌:RTC_WAKEUP和ELAPSED_REALTIME_WAKEUP所具有的唤醒功能,但该WAKE_lock仅仅在广播、Activity、Service启动/发送期间有效。后台Service要处理耗时操作,必须主动申请和释放WakeLock资源,防止耗时操作无疾而终。