AlarmManager的使用机制有的称呼为全局定时器,有的称呼为闹钟。指定时长或以周期形式执行某项操作。通过对它的使用,个人觉得叫全局定时器比较合适,其实它的作用和Timer有点相似。都有两种相似的用法:(1)在指定时长后执行某项操作(2)周期性的执行某项操作



      AlarmManager对象配合Intent使用,可以定时的开启一个Activity, 发送一个BroadCast,或者开启一个Service,run一段代码。概括起来就是通过Intent对组件进行操作。



下面的代码详细的介绍了两种定时方式的使用:



 (1)在指定时长后执行某项操作



代码实例:



    // 操作:发送一个广播,广播接收后Toast提示定时操作完成

    

    Intent intent = new Intent(Main.this, alarmreceiver.class);

    intent.setAction("short");

    PendingIntent sender =  PendingIntent.getBroadcast(Main.this, 0, intent, 0);

    

    //设定一个五秒后的时间

    Calendar calendar = Calendar.getInstance();

    calendar.setTimeInMillis(System.currentTimeMillis());

    calendar.add(Calendar.SECOND, 5);

    

    AlarmManager alarm = (AlarmManager)getSystemService(ALARM_SERVICE);

    alarm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);

    //或者以下面方式简化

    //alarm.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+5*1000, sender);

    

    Toast.makeText(Main.this, "五秒后alarm开启", Toast.LENGTH_LONG).show();





//注意:receiver记得在manifest.xml注册



代码实例:



    public static class alarmreceiver extends BroadcastReceiver {



        @Override

        public void onReceive(Context context, Intent intent) {

            // TODO Auto-generated method stub

            if(intent.getAction().equals("short")){

                Toast.makeText(context, "short alarm", Toast.LENGTH_LONG).show();

            } else {

                Toast.makeText(context, "repeating alarm",   Toast.LENGTH_LONG).show();

            }

        }

    }



(2)周期性的执行某项操作



代码实例:



    Intent intent = new Intent(Main.this, alarmreceiver.class);

    intent.setAction("repeating");

    PendingIntent sender = PendingIntent.getBroadcast(Main.this, 0, intent, 0);

        //开始时间

    long firstime = SystemClock.elapsedRealtime();



    AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);  //5秒一个周期,不停的发送广播

    am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP  , firstime, 5*1000, sender);



    AlarmManager的setRepeating()相当于Timer的Schedule(task,delay,peroid);有点差异的地方时Timer这个方法是指定延迟多长时间





以后开始周期性的执行task;



      AlarmManager的取消:(其中需要注意的是取消的Intent必须与启动Intent保持绝对一致才能支持取消AlarmManager)



代码实例:



  Intent intent = new Intent(Main.this, alarmreceiver.class);

  intent.setAction("repeating");

  PendingIntent sender = PendingIntent.getBroadcast(Main.this, 0, intent, 0);

  AlarmManager alarm = (AlarmManager)getSystemService(ALARM_SERVICE);

  alarm.cancel(sender);


setRepeating方法有4个参数,这些参数的含义如下:



type:表示警报类型,一般可以取的值是AlarmManager.RTC和AlarmManager.RTC_WAKEUP。如果将type参数值设为AlarmManager.RTC,表示是一个正常的定时器,如果将type参数值设为AlarmManager.RTC_WAKEUP,除了有定时器的功能外,还会发出警报声(例如,响铃、震动)。



triggerAtTime:第1次运行时要等待的时间,也就是执行延迟时间,单位是毫秒。



interval:表示执行的时间间隔,单位是毫秒。



operation:一个PendingIntent对象,表示到时间后要执行的操作。PendingIntent与Intent类似,可以封装Activity、BroadcastReceiver和Service。但与Intent不同的是,PendingIntent可以脱离应用程序而存在。

最后再介绍一下type参数:

public static final int ELAPSED_REALTIME

        

//当系统进入睡眠状态时,这种类型的闹铃不会唤醒系统。直到系统下次被唤醒才传递它,该闹铃所用的时间是相对时间,是从系统启动后开始计时的,包括睡眠时间,可以通过调用SystemClock.elapsedRealtime()获得。系统值是3   (0x00000003)。     





public static final int ELAPSED_REALTIME_WAKEUP

        

//能唤醒系统,用法同ELAPSED_REALTIME,系统值是2 (0x00000002) 。       





public static final int RTC

        

//当系统进入睡眠状态时,这种类型的闹铃不会唤醒系统。直到系统下次被唤醒才传递它,该闹铃所用的时间是绝对时间,所用时间是UTC时间,可以通过调用 System.currentTimeMillis()获得。系统值是1 (0x00000001) 。



public static final int RTC_WAKEUP        

//能唤醒系统,用法同RTC类型,系统值为 0 (0x00000000) 。

















AlarmManager(全局定时器/闹钟)详解的更多相关文章

  1. Android之AlarmManager(全局定时器/闹钟)指定时长或以周期形式执行某项操作

    1.AlarmManager,顾名思义,就是“提醒”,是Android中常用的一种系统级别的提示服务,可以实现从指定时间开始,以一个固定的间隔时间执行某项操作,所以常常与广播(Broadcast)连用 ...

  2. Android AlarmManager(全局定时器/闹钟)指定时长或以周期形式执行某项操作

    AlarmManager的使用机制有的称呼为全局定时器,有的称呼为闹钟.通过对它的使用,个人觉得叫全局定时器比较合适,其实它的作用和Timer有点相似.都有两种相似的用法:(1)在指定时长后执行某项操 ...

  3. 我的Android进阶之旅------>Android使用AlarmManager全局定时器实现定时更换壁纸

    该DEMO将会通过AlarmManager来周期的调用ChangeService,从而让系统实现定时更换壁纸的功能. 更换壁纸的API为android.app.WallpaperManager,它提供 ...

  4. 整合Spring时Service层为什么不做全局包扫描详解

    合Spring时Service层为什么不做全局包扫描详解 一.Spring和SpringMVC的父子容器关系 1.讲问题之前要先明白一个关系 一般来说,我们在整合Spring和SpringMVC这两个 ...

  5. spring盒springMVC整合父子容器问题:整合Spring时Service层为什么不做全局包扫描详解

    整合Spring时Service层为什么不做全局包扫描详解 一.Spring和SpringMVC的父子容器关系 1.讲问题之前要先明白一个关系 一般来说,我们在整合Spring和SpringMVC这两 ...

  6. 进程、线程与GIL全局解释器锁详解

    进程与线程的关系: . 线程是最小的调度单位 . 进程是最小的管理单元 . 一个进程必须至少一个线程 . 没有线程,进程也就不复存在 线程特点: 线程的并发是利用cpu上下文的切换(是并发,不是并行) ...

  7. android之AlarmManager 全局定时器

    AlarmManager实质是一个全局的定时器,是Android中常用的一种系统级别的提示服务,在指定时间或周期性启动其它组件(包括Activity,Service,BroadcastReceiver ...

  8. setTimeout和setInterval定时器使用详解测试

    var len=4; while(len--){ var time=setTimeout(function(){ console.log(len); },0); console.log(time); ...

  9. MyBatis全局配置文件标签详解

    一.全局配置文件结构 configuration 配置 properties 属性:可以加载properties配置文件的信息 settings 设置:可以设置mybatis的全局属性 typeAli ...

随机推荐

  1. Python函数可变参数*args及**kwargs详解

    初学Python的同学们看到代码中类似func(*args, **kwargs)这样的函数参数定义时,经常感到一头雾水. 下面通过一个简单的例子来详细解释下Python函数可变参数*args及**kw ...

  2. ldconfig几个需要注意的地方

    1. 往/lib和/usr/lib里面加东西,是不用修改/etc/ld.so.conf的,但是完了之后要调一下ldconfig,不然这个library会找不到 2. 想往上面两个目录以外加东西的时候, ...

  3. 为什么webstrom无法格式化代码?

    用过webstrom的童鞋都知道格式化代码需要按快捷键:ctrl+Alt+L:可是我最近发现这个快捷键不管用,今天终于知道了原因, 是后台网易云音乐没有关,和网易云音乐的快捷键冲突了,就是这么神奇没办 ...

  4. BZOJ 3640: JC的小苹果 [概率DP 高斯消元 矩阵求逆]

    3640: JC的小苹果 题意:求1到n点权和\(\le k\)的概率 sengxian orz的题解好详细啊 容易想到\(f[i][j]\)表示走到i点权为j的概率 按点权分层,可以DP 但是对于\ ...

  5. BZOJ 4569: [Scoi2016]萌萌哒 [并查集 倍增]

    传送门 题意:长为$n \le 10^5$的数字,给出$m \le 10^5$个限制$[l1,r1]\ [l2,r2]$两个子串完全相等,求方案数 把所有要求相等的位置连起来,不就是$9*10^{连通 ...

  6. I can do it

    If it doesn't challange you ,it won't change you.

  7. qt中的多线程

    1.dialog.h #define DIALOG_H #include <QDialog>#include"mythread.h"namespace Ui {clas ...

  8. php+redis 学习 一 连接

    <?php header('content-type:text/html;chaeset=utf-8'); $redis = new Redis(); $redis->connect('1 ...

  9. 调试 smallcorgi/Faster-RCNN_TF 的demo过程遇到的问题

    最近在调试faster R-CNN时,遇到了各种各样的问题.使用的算法库为https://github.com/smallcorgi/Faster-RCNN_TF 注:本文使用的是通过virtuale ...

  10. 【转】Nginx配置详解

    转自:http://www.cnblogs.com/knowledgesea/p/5175711.html Nginx常用功能 1. Http代理,反向代理:作为web服务器最常用的功能之一,尤其是反 ...