zoukankan      html  css  js  c++  java
  • 《第一行代码》学习笔记39-服务Service(6)

    1.Android中定时任务一般有两种实现方式:(1)使用Java API里提供的Timer类;(2)使用Android的Alarm机制。
    但是,Timer类有个明显的短板,不太适用于那些需要长期在后台运行的定时任务。

    2.为了让电池更加耐用,每种手机都有自己的休眠政策,Android手机会在长时间不操作的情况下自动让CPU进入到
    睡眠状态,可能导致Timer类中的定时任务无法正常运行;而Alarm机制具有唤醒CPU功能,可以保证每次需要执行
    定时任务时CPU都能正常工作。

    3.获取个AlarmManager实例:

    AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    

    接下来调用AlarmManager的set()方法,可以设置个定时任务:

    long triggerAtTime = SystemClock.elapsedRealtime() + 10 * 1000; //设定个任务在10秒后执行
    manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, pendingIntent);
    

    set()方法,第一个参数是整型参数,指定AlarmManager的工作类型,
    ELAPSED_REALTIME:定时任务的触发时间从系统开机开始算起,不会唤醒CPU。
    ELAPSED_REALTIME_WAKEUP:定时任务的触发时间从系统开机开始算起,会唤醒CPU。
    RTC:定时任务的触发时间从1970年1月1日0点算起,不会唤醒CPU。
    RTC_WAKEUP:定时任务的触发时间从1970年1月1日0点算起,会唤醒CPU。

    4.使用SystemClock.elapsedRealtime()方法可获取到系统开机至今所经历时间的毫秒数,
    使用System.currentTimeMillis()方法可获取到1970年1月1日0点至今所经历时间的毫秒数。

    5.第二个参数,定时任务触发的时间,以毫秒为单位,这里是传入开机至今的时间或1970年1月1日0点至今的时间,最后再
    加上延迟执行的时间。第三个是一个PendingIntent,一般调用getBroadcast()方法来获取一个能够执行广播的PendingIntent。
    当定时任务被触发的时候,广播接收器的onReceive()方法可以得到执行。

  • 相关阅读:
    设计模式-解释器模式
    安卓运行环境(四)
    安卓创建应用窗口(三)
    微型 ORM 的第二篇 DapperLambda性能测试[Dapper比较篇]
    微型 ORM 的第一篇 DapperLambda发布
    visual studio 2013 使用IIS Express附加调试MVC5
    数据库常用查询语句写法(优化)
    Windows Server 2008通过计划任务定时执行bat文件
    第一章 Memcached安装
    第四章 LINQ to SQL基本用法
  • 原文地址:https://www.cnblogs.com/Iamasoldier6/p/5049609.html
Copyright © 2011-2022 走看看