AlarmMananger及PendingIntent的首次使用

来源:互联网 发布:字体修改软件 编辑:程序博客网 时间:2024/05/17 06:58

多low,也得做好总结——题记

看项目代码的时候,发现在项目的首个页面,调用了AlarmManager启动一个广告(BroadCastReceiver),这玩意儿没见过,于是就上网查了些资料,想了解是干啥,作用很简单:启动一个系统级的定时器,定时的启动某个Intent(这个intent可以代表某个activity,service或者BroadCastReceiver,项目还没有看完,但我目前猜测应该是心跳包啥的)。

于是照着网上给的案例,自己试着写了一个小程序,并将心得归纳如下:

AlarmManager的实例对象,依然是通过context强大的资源获取功能获得,一般是这样创建实例

AlarmManager am  = (AlarmManager)getSystemService(ALARM_SERVICE);

对象创建完成之后,她的使用也很简单,一句代码

am.setInexactRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis ,1000 , pendingIntent);

四个参数的意义如下:

AlarmManager.RTC_WAKEUP:定时器的工作模式,该参数表示,即使在定时器睡眠的情况下,依然能够唤醒系统,执行相应操作。除了这个参数,还有包括:AlarmManager.RTC、 AlarmManager.POWER_OFF_WAKEUP......等其他属性。

System.currentTimeMillis:这是个long类型的数据,代表闹钟的起始时间,这个参数个第一个定时器的工作模式参数有关系,不同的模式需要的时间不同,有的是相对时间,有的是绝对时间,这里我们用的当前系统时间。

1000:这个是时间间隔,单位是毫秒,也就是说,我们每隔1秒钟,定时器任务执行一次。

pendingIntent:这个数据是一个PendingIntent类型的对象,PendingIntent对象中会封装一个intent的对象,一般我们使用Intent的对象时候,都需要手动启动一下,如:startService(Intent)。。。等等,而PendingIntent则可以简化这个步骤(下面会解释),她的初始化如下:

Intent intent = newIntent("cn.lichangshun.test.MyReceiver");

    intent.putExtra("msg","What are you fucking!!!!");    PendingIntent pendingIntent = PendingIntent.getBroadcast(this , 0 , intent , 0);
    从代码中可以看到,定义一个intent对象后,直接封装他到PendingIntent即可,值得注意的是,根据intent启动对象的不同,有getBroadcast,getService,getActivity这几个方法需要选择。因为我的程序中intent启动是一个广告,所以我用的getBroadcast这个方法,里面的四个参数分别是
   this:当前activity对象
   0:int类型的请求码,直接写0;
   intent:要封装的intent对象。
   flag:标志位,我是没有心情看下去的,也是直接按照网上的说法,写0;
   以上步骤完成之后,关于alarmManager和pendingIntent的简单使用,就没有了,剩下的则是完成intent启动的广告代码的编写,不赘述,直接上图:
   activity:

广告:

   配置文件:

0 0
原创粉丝点击