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. Spring MVC的DispatcherServlet

    Spring MVC提供了一个名为org.springframework.web.servlet.DispatcherServlet的Selvet充当前端控制器,所有的请求驱动都围绕这个Dispatc ...

  2. iOS-AFNetworking封装Get(自定义HTTP Header)和Post请求及文件下载

    前面提到AFNetworking是一个很强大的网络三方库,首先你需要引入AFNetworking三方库:如封装的有误还请指出,谢谢! 1.Get请求 /**Get请求 url 服务器请求地址 succ ...

  3. Linux根据UUID自动挂载磁盘分区

    一般服务器都有多个硬盘分区,在重启后,这些分区的逻辑位置加载时可能会发生变动,如果使用传统的设备名称(例如:/dev/sda)方式挂载磁盘,就可能因为磁盘顺序变化而造成混乱. Linux环境中每个Bl ...

  4. 《算法导论》Chapter 4 Divide-and-Conquer的学习笔记

    Introduction Divide-and-Conquer的三个步骤: Divide the problem into a number of subproblems that are small ...

  5. [代码]JS原生Ajax,GET和POST

    javascript/js的ajax的GET请求: <script type="text/javascript"> /* 创建 XMLHttpRequest 对象 */ ...

  6. 《CSS核心技术详解》

    前言 看似简单的CSS,却暗藏玄机,那是我们摸爬滚打好长时间后悟出的真理. 在很长的一段时间里,我并没有重视CSS,觉得CSS很简单,无非就是一些属性:后来才发现自己小看了CSS,对CSS的了解实在是 ...

  7. 对Javascript到底了解多少,一测便知道

    笔者在这里附上一段代码,请读者思考一下程序的运行结果: console.log(a); //??? a(); var a=3; function a(){ console.log(10); } con ...

  8. ACE-6.1.0 linux 下的编译与安装步骤

    ACE-6.1.0 linux 下的编译与安装步骤  引用至http://www.cnblogs.com/liangxiaxu/archive/2013/03/07/2948417.html 1.从  ...

  9. 【翻译】我如何使用CSS来制作bitsofcode Logo动画

    翻译文章,翻译不好,还望大家指出 原文地址:How I Animated the bitsofcode Logo with CSS 我是css动画的新手,这样说是因为我只在有限的案例中使用过他们,而且 ...

  10. 记录:mac的浏览器访问任何域名、网址都跳转到本地127.0.0.1或固定网址

    新年上班第一天,刚开机就遇到了个小坑,问题是这样,打开浏览器,输入任何网址都跳转到本地的一个项目,该项目在本地Apache配置下,监听的端口是8888,本机访问的形式是127.0.0.1:8888. ...