Alerm具有cup运行锁,而Timer不具有cpu锁。
每种手机都具有自己的休眠策略,当长时间不是手机的情况下,cpu就会进入休眠状态。在这种情况下Timer将无法工作。而Alerm具有cpu锁,将会导致cpu无法休眠。
AlarmManager manger=(AlarManger)getSystemService(Context.ALARM_SERVICE)
manger.set(int flag,long time,PendingIntent pendingIntent)
set方法参数说明:
第一个参数flag为工作类型:
AlarmManger .ELAPSED_REALTIME:让定时时间从开机算起时间算起,但不会唤醒cpu。
AlarmManger.ELAPSED_REALTIME_WAKEUP:同样表示让定时时间从开机算起,但会唤醒 CPU。
RTC:表示让定时任务从1970年1月1日算起,但是不唤醒cpu。
RTC_WAKEUP:表示让定时任务从1970年1月1日算起,但是唤醒cpu。
提示:SystemClock.elapsedReadtime()---获取系统开机至今所经历的毫秒数;
System.currentTimeMillis()-------方法获取1970年1月1日至今天的毫秒数;
第二个参数: 延时的时间,单位毫秒;
第三个参数: PendingIntent指定具体动作;
注意:Android4.4版本后set方法触发不准确,有可能会延时一段时间执行(这不是Bug,是电池性能优化,系统会检测目前有多少个Alarm任务存在,然后将触发相近的几个任务一起执行)
如果要精确执行,将 setExact() 方法代替set()方法。
cancel ( PendingIntent operation )
方法将会取消Intent匹配的任何闹钟。
setRepeating(int type,long triggerAtTime,long interval,PendingIntent operation);
参数说明:interval重复时间间隔;(4.4后触发不准时)
AlarmManger的其它功能:
设置系统时间和时区
添加权限:android.permission.SET_TIME;
通过setTime(long millis)方法设置系统时间;
需要添加android.permission.SET_TIME_ZONE权限。
通过setTimeZone(String tz)方法设置时区;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)