AlarmManager AlarmManager是Android提供的一个全局定时器,其使用范围要大于Timer方式。...相比之下,AlarmManager利用系统的提醒服务定时发送广播,所以不但适用于线程间通信,而且也适用于进程间通信。...AlarmManager常用的启动方法有两个: set : 该方法用于设置一次性定时器。第一个参数表示定时器类型,第二个参数表示任务执行时间,第三个参数表示定时任务。...下面是Timer、CountDownTimer和AlarmManager三种定时器的示例代码: import java.util.Timer; import java.util.TimerTask;...alarmMgr = (AlarmManager)getSystemService(ALARM_SERVICE); alarmMgr.setRepeating( AlarmManager.RTC_WAKEUP
AlarmManager称呼为全局定时器,有的称呼为闹钟。其实它的作用和Timer有点相似。...都有两种相似的用法: (1)在指定时长后执行某项操作(2)周期性的执行某项操作 AlarmManager 包含的主要方法: // 取消已经注册的与参数匹配的定时器 void cancel(PendingIntent...triggerAtTime, long interval, PendingIntent operation) //设置时区 void setTimeZone(String timeZone) AlarmManager...见api/app/alarm/AlarmController实例 demo: AlarmManager mgr = (AlarmManager) context .getSystemService...() + diff, AlarmManager.INTERVAL_DAY, pi);
一看到这个需求就想到了使用 AlarmManager 来实现。 AlarmManager 经常被用来执行定时任务,比如设置闹铃、发送心跳包等。...所以,综上所述,AlarmManager 就成为了最佳选择。...SDK API < 19 一般情况下,使用 AlarmManager 来执行重复定时任务的代码如下所示: alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP...第一个参数表示闹钟类型:一般为 AlarmManager.ELAPSED_REALTIME_WAKEUP 或者 AlarmManager.RTC_WAKEUP 。...另外,对于相似的 AlarmManager.ELAPSED_REALTIME 和 AlarmManager.RTC 来说,它们不会唤醒 CPU 。
alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); if (Build.VERSION.SDK_INT...) { //LOLLIPOP 21 OR ABOVE AlarmManager.AlarmClockInfo alarmClockInfo = new AlarmManager.AlarmClockInfo...>= Build.VERSION_CODES.KITKAT) { //KITKAT 19 OR ABOVE alarmManager.setExact(AlarmManager.RTC_WAKEUP..., time, sender); } else { //FOR BELOW KITKAT ALL DEVICES alarmManager.set(AlarmManager.RTC_WAKEUP...; } } 闹钟类,目前只用过AlarmManager.RTC_WAKEUP类型,这个是精确定时,很多博客都提到过,不了解的可以自己查查。
: Native set alarm :Alarm{41e4d570 type 2 com.android.phone} 01-03 13:47:59.056 653 699 V AlarmManager...: Native set alarm :Alarm{42041000 type 2 com.google.android.gsf} 01-03 13:48:52.076 653 699 V AlarmManager...: Native set alarm :Alarm{421dec08 type 2 com.android.phone} 01-03 13:48:58.264 653 699 V AlarmManager...: Native set alarm :Alarm{41c04b80 type 0 com.google.android.gsf} 01-03 13:48:58.358 653 885 V AlarmManager...: Native set alarm :Alarm{42007638 type 0 com.google.android.gsf} 01-03 13:48:59.090 653 699 V AlarmManager
文章目录 一、AlarmManager 简介 二、使用 AlarmManager 保持 CPU 唤醒流程 ( 省电操作 ) 三、使用 WeakLock 保持 CPU 唤醒 代码示例 1、Service...可以一定程度上替代上述 WeakLock , 并且可以稳定每隔一段时间唤醒 CPU , 避免了 CPU 全程唤醒的情况 , 同时也降低了耗电量 ; 一、AlarmManager 简介 ---- AlarmManager...简介 : ① 激活时间 : AlarmManager 可以脱离于应用生命周期限制 , 每隔一段时间 , 定期执行任务 ; 即使应用没有执行 , 或者手机处于休眠状态 , 也可以触发执行操作 ; ② 间隔设定..., 然后继续休眠 , 可以极大降低资源消耗 ; 二、使用 AlarmManager 保持 CPU 唤醒流程 ( 省电操作 ) ---- 使用 AlarmManager 保持 CPU 处于唤醒状态 ,...比使用 WeakLock 更省电 ; 使用 AlarmManager 保持 CPU 唤醒流程 : ① 创建自定义广播接收者 : 这里为了简单 , 在 Service 中简单创建一个广播接收者 , 处理
View.OnClickListener() { @Override public void onClick(View v) { AlarmManager...alarmManager = (AlarmManager) getSystemService(Service.ALARM_SERVICE); alarmManager.setRepeating...(AlarmManager.ELAPSED_REALTIME_WAKEUP, 0, 2000, pi); mStart.setEnabled(false); mStop.setEnabled...v) { mStart.setEnabled(true); mStop.setEnabled(false); AlarmManager...alarmManager = (AlarmManager) getSystemService(Service.ALARM_SERVICE); alarmManager.cancel
在Andriod系统中实现定时功能,最终还是要用到系统提供的AlarmManager,只是当一个定时完成后怎么继续处理,或者中间怎么更新定时的时间或者状态,像闹钟这种应用程序,每天重复定时,或者一周选择其中的几天... am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); if (Utils.isKitKatOrLater()...) { am.setExact(AlarmManager.RTC_WAKEUP, timeInMillis, pendingIntent); } else... { am.set(AlarmManager.RTC_WAKEUP, timeInMillis, pendingIntent); } }...整体的框架就是这样,在AlarmStateManager里使用AlarmManager形成了一个定时的状态机,不断转移到下一个状态处理。
编号1:是处理弹出提示窗口的一个Activity; 编号2:Main类,设置时间周期等操作 编号3:核心类,负责计算周期时间,然后将时间通过AlarmManager发送定时广播; 编号4:广播类,负责处理...开始结束时间开关: 可以看到是将不同的 ALARM_SETTING_TYPE值发送给了 AlarmOpreation的 cancelAlert方法; /× ×将AlarmManager注销 ×/...并发送对应的广播,关闭的好理解,仔细看看开启: /× ×启动AlarmManager ×/ public static void enableAlert(Context context, int type...alarmsSetting.isOutEnble()){ return; } AlarmManager mAlarmManager = (AlarmManager...通过 AlarmManager的 set方法定时, mAlarmManager.set(AlarmManager.RTC_WAKEUP,mCalendar.getTimeInMillis(),pi);,
restartIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_ONE_SHOT); AlarmManager...mgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE); mgr.set(AlarmManager.RTC, System.currentTimeMillis
效果图 来看分析和讲解之前,先看看效果吧,效果图如下: 设置界面 闹钟提醒界面 AlarmManager 对于AlarmManager里的方法我就不逐一介绍了,如果都介绍讲完估计就天黑了。...AlarmManager这个类提供对系统闹钟服务的访问接口。...在API 19 以前,AlarmManager的常用方法有三个: set(int type,long startTime,PendingIntent pi); 该方法用于设置一次性闹钟,第一个参数表示闹钟类型...从API 19开始,AlarmManager的机制都是非准确传递,操作系统将会转换闹钟,来最小化唤醒和电池使用。...解决遇到的坑 API 19以后如何设置重复闹钟 我们知道,我们在使用AlarmManager设置了提醒之后,是通过广播接收的,设置的提醒时间一到,系统发送我们自定义的广播,我们接收到,应用程序提醒。
提醒完毕可以再重新设置一次 public class AlarmReceiver extends BroadcastReceiver { private AlarmManager alarmManager...提醒完毕可以再重新设置一次 */ private void alarm(Context context, Intent intent) { alarmManager =...(AlarmManager) context .getSystemService(Context.ALARM_SERVICE); long triggerAtTime...interval = 1000 * 5;// 5s operation = PendingIntent.getBroadcast(context, 0, intent, 0); alarmManager.setWindow...(AlarmManager.RTC_WAKEUP, triggerAtTime, interval, operation); } } 2.手机重启之后,设置的闹钟是否还有效
现在这里就有一个比较大的更新会影响到我们的应用功能,他就是AlarmManager。
alarmManager = null; Calendar calendar = Calendar.getInstance(); @Override protected...=(AlarmManager)getSystemService(Context.ALARM_SERVICE); /* setRepeating(int type,long...alarmManager.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi); //设置闹钟,当前时间就唤醒...=(AlarmManager)getSystemService(Context.ALARM_SERVICE); 2....(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi); 4、闹钟触发是震动和响铃,在 AlarmReceiver中实现: import
//获取系统闹钟 AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); Intent intent =...ReportDetailsActivity.MyReceiver.class); pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0); //开启定时任务 alarmManager.setRepeating...(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 1000, 5 * 1000, pendingIntent); 记得在manifeast 文件配置该广播...} } } } 在OnDestroy()中取消闹钟 @Override protected void onDestroy() { alarmManager.cancel
alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, AlarmManager.INTERVAL_HALF_HOUR..., AlarmManager.INTERVAL_HALF_HOUR, alarmIntent); 在一分钟后唤醒设备并激活一个一次性(无重复)闹钟: private AlarmManager...interval // constants--in this case, AlarmManager.INTERVAL_DAY. alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP...20分钟唤醒一次: private AlarmManager alarmMgr; private PendingIntent alarmIntent; ... alarmMgr = (AlarmManager...这样可以让AlarmManager继续执行它的工作,且不需要用户手动重启闹钟。
定时器AlarmManager常常用于需要周期性处理的场合,比如闹钟提醒、任务轮询等等。...针对定时器AlarmManager的滥用问题,Android从4.4开始,修改了setRepeating方法的运行规则。...set方法实现的代码例子: private String ALARM_EVENT = "com.example.performance.alarm"; private static AlarmManager...// mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, // System.currentTimeMillis()...我们作为开发者,要让定时器适配Android6.0的休眠模式倒也不难,只需把下面这行的set方法代码: mAlarmManager.set(AlarmManager.RTC_WAKEUP
(闹钟服务) 官方API AlarmManager 相关方法 ?...另外,这里用set方法可能有点不准,如果要 更精确的话可以使用setExtra()方法来设置AlarmManager!...在Calendar对应的时间启动Activity alarmManager.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis...alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 获得系统提供的AlarmManager服务的对象 Intent设置要启动的组件...alarmManager.set(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(), pi); 另外假如出现闹铃无效的话,你可以从这些方面入手: 1.系统版本或者手机
Using the AlarmManager to Schedule Tasks at the System Level....The AlarmManager provides access to system-level alarm services....The AlarmManager triggers Services based on an elapsed interval or at a specific clock time....Alarm clock or reminder applications are great examples for AlarmManager usage....AlarmManager and GCM Network Manager are the only options for interrupting a Doze.
领取专属 10元无门槛券
手把手带您无忧上云