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. phantomjs集成到scrapy中,并禁用图片,切换UA

    phantomjs是一个没有界面的浏览器,支持各种web标准,提供DOM 处理, CSS 选择器, JSON, Canvas, 和 SVG,对于爬取一些经过js渲染的页面非常有用.但是phantomj ...

  2. 基于flash的web视频对讲直播测试

    由于项目的需求,要在web上实现视频通话的需求.现成的方案有WebRTC,基于浏览器的成熟方案,但是这个方案和公司项目需求有几个点冲突.后来考虑到基于flash的方案.参考雷神的博客 simplest ...

  3. xBIM WeXplorer

    目录 基础 xBIM WeXplorer 简要介绍 xBIM WeXplorer xViewer 基本应用 xBIM WeXplorer xViewer 浏览器检查 xBIM WeXplorer xV ...

  4. Zookeeper启动时报8080端口被占用

    zookeeper启动时报8080 端口被占用,导致启动失败.特别是服务器上部署了tomcat服务时需要注意. 通过查看zookeeper的官方文档,发现有3种解决途径: (1)删除jetty. (2 ...

  5. HDU [P1150] Machine Schedule

    二分图匹配求最小点覆盖 把两个机器作为两个集合,把每个任务当做边建图.那么所求的就是二分图的最小点覆盖. 但是最开始WA了,原因在于,题目要求的是变换的次数,也就是与0连的边需要删去. #includ ...

  6. POJ 3537 Crosses and Crosses [Multi-SG]

    传送门 我也不知道为什么枚举vis必须加上一个边界才能A 以后还是都加上吧 #include <iostream> #include <cstdio> #include < ...

  7. POJ 3348 Cows [凸包 面积]

    Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9022   Accepted: 3992 Description ...

  8. Linux C 一个简单的线程池程序设计

    最近在学习linux下的编程,刚开始接触感觉有点复杂,今天把线程里比较重要的线程池程序重新理解梳理一下. 实现功能:创建一个线程池,该线程池包含若干个线程,以及一个任务队列,当有新的任务出现时,如果任 ...

  9. codeM美团编程大赛初赛B轮E题

    题目描述 给出一个正整数n,我们把1..n在k进制下的表示连起来记为s(n,k),例如s(16,16)=123456789ABCDEF10, s(5,2)=11011100101.现在对于给定的n和字 ...

  10. python爬站长之家写一个信息搜集器

    前言:不知道写什么好,绕来绕去还是写回爬虫这一块. 之前的都爬了一遍.这次爬点好用一点的网站. 0x01: 自行备好requests模块 目标站:http://tool.chinaz.com/ 0x2 ...