Android定时触发,有几种方式:
1.AlarmService setRepeating方式:
2.使用Java的Timer,和TimeTask,并且和Android的wakelock一起配合使用,否则系统休眠CPU停止运行后,Timer就会失效。
先来看看AlarmService的方式:
Android的framework层提供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来进行广播的