Android定时触发

本文介绍了Android中实现定时触发的两种方式:AlarmService和Timer结合Wakelock。AlarmService通过setRepeating实现周期性任务,但可能会遇到广播阻塞问题。而Timer与Wakelock配合能保证定时触发,即使在CPU休眠状态下。建议在密集定时场景下使用Timer并获取PARTIAL_WAKE_LOCK。
摘要由CSDN通过智能技术生成

        Android定时触发,有几种方式:

1.AlarmService setRepeating方式:

2.使用Java的Timer,和TimeTask,并且和Android的wakelock一起配合使用,否则系统休眠CPU停止运行后,Timer就会失效。

        先来看看AlarmService的方式:

       Androidframework层提供AlarmManager,使用它可以访问系统的Alarm services,称呼为全局定时器,可以进行以下两种操作:(1)在指定时长后执行某项操作(2)周期性的执行某项操作。AlarmManager对象配合Intent使用,可以定时的开启一个Activity,发送一个BroadCast,或者开启一个Service

AlarmService提供了四种类型的闹钟:

ELAPSED_REALTIME:在指定的延时过后,发送广播,但不唤醒设备。
ELAPSED_REALTIME_WAKEUP在指定的演示后,发送广播,并唤醒设备
RTC 在指定的时刻,发送广播,但不唤醒设备
RTC_WAKEUP 在指定的时刻,发送广播,并唤醒设备

AlarmManager提供的方法:
void set(int type, long triggerAtTime, PendingIntent operation)  设置一个闹钟

void setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)  设置一个重复的闹钟

             根据以上AlarmService的用法,我们需要一个重复的,并且在系统休眠时也能提供正常触发的闹钟,因此,我们选择使用ELAPSED_REALTIME_WAKEUP,并且使用setRepreating方法初始化闹钟,每秒触发,发送一个广播BroadCast ,代码如下:

Private final String ACTION_TIME = "android.intent.action.ATSS.Timer";
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);  
Intent intent = new Intent(ACTION_TIME);  
PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0);  
long firsttime = SystemClock.elapsedRealtime();    
//使用ELAPSED_REALTIME_WAKEUP,保证即使系统休眠,也能正常进行触发 
//1秒一个周期,不停的发送广播 alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,firsttime, 1000,sender);

使用AlarmRecevier来进行广播的

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值