定时任务

两种实现方式

  1. 一种是Java API中的Timer类
  2. 另一种是Alarm机制
  3. 两者大多数情况下都有类似的效果,手机在不运行时,会进入睡眠状态,
  4. 这样可能导致Timer的定时任务无法正常运行。
  5. Alarm机制则不存在这种情况,它具有唤醒CUP的功能。即可以保证每次需要执行定时任务的时候,CPU都能正常的工作。

    Alarm机制的用法

  6. 借助AlarmManager类来实现,通过调用Contenxt的getSystemService()方法来获取实例,这里传递的参数为 Context.ALARM_SERVICE,获取AlarmManage的实例如下

 AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
  • 接下来调用AlarmManage的set方法就可以设置一个定时任务了。如下设置一个10s 后执行的任务
 AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);

//SystemClock.elapsedRealtime() 开机至今 + 要等待的时间
        long triggerAtTime = SystemClock.elapsedRealtime() + 10 * 1000;

        Intent intent = new Intent(this,AlarmBroadcast.class);
        PendingIntent pi = PendingIntent.getBroadcast(this,0,intent,PendingIntent.FLAG_CANCEL_CURRENT);

        manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,triggerAtTime,pi);
AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);

// 从 1970.0.0到现在的时间 + 要等待的时间
        long triggerAtTime = SystemClock.currentThreadTimeMillis() + 10 * 1000;

        Intent intent = new Intent(this,AlarmBroadcast.class);
        PendingIntent pi = PendingIntent.getBroadcast(this,0,intent,PendingIntent.FLAG_CANCEL_CURRENT);

        manager.set(AlarmManager.RTC_WAKEUP,triggerAtTime,pi);
  • manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,triggerAtTime,pi);
  • 参数1 AlarmManager.ELAPSED_REALTIME_WAKEUP 表示让任务触发的时间从1970。0.0算起,可以唤醒CPU
  • AlarmManager.ELAPSED_REALTIME 表示让任务触发的时间从1970。0.0算起,不可以唤醒CPU
  • AlarmManager.RTC_WAKEUP 表示让任务触发的时间从 开机算起 ,可以唤醒CPU
  • AlarmManager.RTC 不可以唤醒CPU
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值