• 《第一行代码》学习笔记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()方法可以得到执行。

  • 相关阅读:
    前言内容
    hibernate criteria中Restrictions的用法
    数据库默认端口
    MyEcplise2014集成SVN
    Java中的HashMap和HashTable到底哪不同?(原文参考来自码农网)
    MyEclipse控制台报错:java.lang.OutOfMemoryError: PermGen space
    版本管理软件Git 初感
    二分法,冒泡排序
    关于tail, head ,less ,more ,cat 之小介------Linux命令
    java:字符串反转
  • 原文地址:https://www.cnblogs.com/Iamasoldier6/p/5049609.html
Copyright © 2020-2023  润新知