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()方法可以得到执行。

  • 相关阅读:
    react:如何创建一个新项目
    python3-多重继承
    Stylus-富有表现力的、动态的、健壮的CSS
    使用@property
    python3-使用__slots__
    python:实例属性和类属性
    java_day1
    学习笔记144—SPSS 重复测量方差分析【方法二】
    学习笔记143—SPSS 重复测量的多因素方差分析
    学习笔记142—Matlab如何读取Excel和写入Excel??
  • 原文地址:https://www.cnblogs.com/Iamasoldier6/p/5049609.html
Copyright © 2011-2022 走看看