• Android 编程下 AlarmManager


    对应 AlarmManager 有一个 AlarmManagerServie 服务程序,该服务程序才是正真提供闹铃服务的,它主要维护应用程序注册的各类闹铃并适时的设置即将触发的闹铃给闹铃设备 ( 在系统中,Linux 实现的设备名为 ”/dev/alarm” ) ,并且一直监听闹铃设备,一旦有闹铃触发或者是闹铃事件发生,AlarmManagerServie 服务程序就会遍历闹铃列表找到相应的注册闹铃并发出广播。该服务程序在系统启动时被系统服务程序 system_service 启动并初始化闹铃设备 ( /dev/alarm ) 。当然,在 JAVA 层的 AlarmManagerService 与 Linux Alarm 驱动程序接口之间还有一层封装,那就是 JNI。(参考官方文档:AlarmManager | Android Developers

    AlarmManager 将应用与服务分割开来后,使得应用程序开发者不用关心具体的服务,而是直接通过 AlarmManager 来使用这种服务。这也许就是客户/服务模式的好处吧。AlarmManager 与 AlarmManagerServie 之间是通过 Binder 来通信的,他们之间是多对一的关系。

    AlarmManager 提供了 8 个与之相关的方法:

      AlarmManager Public Methods (方法)

      void  

      cancel(PendingIntent operation)

      取消参数匹配的闹铃

    void

      set(int type, long triggerAtMillis, PendingIntent operation)

      注册一个新的闹铃

    void

      setExact(int type, long triggerAtMillis, PendingIntent operation)

      注册一个新的闹铃,这个闹铃将在指定的时间被准确的执行

    void

      setInexactRepeating(int type, long triggerAtMillis, long intervalMillis, PendingIntent operation)

      注册一个对触发时间并不是很精准的闹铃,例如,一个闹铃每小时都会重复,但不一定都是在每个小时的最开始被触发

    void

      setRepeating(int type, long triggerAtMillis, long intervalMillis, PendingIntent operation)

      注册一个重复类型的闹铃

    void

      setTime(long millis)

      设定系统时钟时间

    void

      setTimeZone(String timeZone)

      设置系统默认时区

    void

      setWindow(int type, long windowStartMillis, long windowLengthMillis, PendingIntent operation)

      注册一个闹铃,这个闹铃将在给定的时间窗口内被触发

      Constants (类型)

      public static final int ELAPSED_REALTIME

      Constant Value: 3 (0x00000003)

      这种类型的闹铃不会唤醒系统,如果这种闹铃在系统休眠状态终止,它会在系统下次唤醒的时候被触发。该种闹铃所用的时间是相对时间,是从系统启动后开始

      计时的,包括睡眠时间,可以通过调用 SystemClock.elapsedRealtime() 获得。

      public static final int ELAPSED_REALTIME_WAKEUP

      Constant Value: 2 (0x00000002)

      这种类型的闹铃能在终止的时候唤醒系统,用法同 ELAPSED_REALTIME

      public static final long INTERVAL_DAY

      Constant Value: 86400000 (0x0000000005265c00)

      public static final long INTERVAL_FIFTEEN_MINUTES

      Constant Value: 900000 (0x00000000000dbba0)

      public static final long INTERVAL_HALF_DAY

      Constant Value: 43200000 (0x0000000002932e00)

      public static final long INTERVAL_HALF_HOUR

      Constant Value: 1800000 (0x00000000001b7740)

      public static final long INTERVAL_HOUR

      Constant Value: 3600000 (0x000000000036ee80)

      public static final int RTC

      Constant Value: 1 (0x00000001)

      这种类型的闹铃不会唤醒系统,如果这种闹铃在系统休眠状态终止,它会在系统下次唤醒的时候被触发。该闹铃所用的时间是绝对时间,可以通过调用

      System.currentTimeMillis() (wall clock time in UTC) 获得。

      public static final int RTC_WAKEUP

      Constant Value: 0 (0x00000000)

      这种类型的闹铃能在终止的时候唤醒系统,用法同 RTC

    注意一个重要的参数 PendingIntent。这个 PendingIntent 可以说是 Intent 的进一步封装, 因为它不仅对 Intent 进行了描述,也对使用该 Intent 所要完成的目标动作进行了描述。开发者可以通过以下六个方法来获得 PendingIntent 实例。(参考官方文档:PendingIntent | Android Developers

      PendingIntent Public Methods (方法)

      static PendingIntent  

      getActivities(Context context, int requestCode, Intent[] intents, int flags)

      方法同 getActivity(Context, int, Intent, int),但允许提交一个由多个 Intent 组成的数组

    static PendingIntent

      getActivities(Context context, int requestCode, Intent[] intents, int flags, Bundle options)

      方法同 getActivity(Context, int, Intent, int),但允许提交一个由多个 Intent 组成的数组

    static PendingIntent

      getActivity(Context context, int requestCode, Intent intent, int flags)

      返回一个可以打开新 Activity 的 PendingIntent,相当于调用  Context.startActivity(Intent)。

    static PendingIntent

      getActivity(Context context, int requestCode, Intent intent, int flags, Bundle options)

      返回一个可以打开新 Activity 的 PendingIntent,相当于调用  Context.startActivity(Intent)。

    static PendingIntent

      getBroadcast(Context context, int requestCode, Intent intent, int flags)

      返回一个可以发送广播的 PendingIntent,相当于调用 Context.sendBroadcast()。

    static PendingIntent

      getService(Context context, int requestCode, Intent intent, int flags)

      返回一个可以启动服务的 PendingIntent,相当于调用  Context.startService()。

  • 相关阅读:
    Revit 二次开发参照属性
    存储过程分页 (多条件拼接)
    Dapper的使用
    C#实现简单的邮件发送
    ORM 简介
    Web Services简介
    事物、锁、存储过程
    游标和触发器简介
    ASP.NET 上传文件方法
    C# Web API 实现上传功能
  • 原文地址:https://www.cnblogs.com/sunzn/p/3503769.html
Copyright © 2020-2023  润新知