2011年9月12日 星期一

[Android] AlarmManager

* AlarmManager

  • 主要維護 app 所註冊的鬧鐘(在系统中,linux實現的設備名為”/dev/alarm”)。會一直監視著鬧鐘設備,一旦有鬧鐘處發或是鬧鐘事件發生,AlarmManagerServie就會從鬧鐘列表中找尋對應的鬧鐘並發出廣播。
  • 系統啟動時,system_service啟動並初始化 /dev/alarm。
  • 在 JAVA 層的AlarmManagerService與Linux Alarm驅動程序接口之間還是有一層封裝,那就是JNI
  • AlarmManager 與 AlarmManagerServie之間是通過Binder來通信的,他們之間是多對一(?)的關系。


* 鬧鐘類型

  • public static final int ELAPSED_REALTIME
    • 當系統進入睡眠狀態時不會喚醒系統,直到系统下次被唤醒才會傳遞此訊息
    • 所用的時間是相對時間,是從系统啟動後開始計算的,包括睡眠時間,可以通過 SystemClock.elapsedRealtime() 取得。
  • public static final int ELAPSED_REALTIME_WAKEUP
    • 當系統進入睡眠狀態時能唤醒系统,ex: 透過聲音、振動。
  • public static final int RTC
    • 當系统進入睡眠狀態時,不會喚醒系統,直到系统下次被唤醒才會傳遞此訊息。
    • 所用的時間是絕對時間,UTC 時間,可以通過 System.currentTimeMillis() 取得。
  • public static final int RTC_WAKEUP
    • 會唤醒此系統,傳遞此訊息。
  • Public static final int POWER_OFF_WAKEUP
    • 會喚醒系統,在裝置關機的狀態下也可以喚醒系統,同RTC類型。

Related
[API] Alarm

* Reference
- 深入学习android之AlarmManager - Java-Jinguo - ITeye技术网站
- 8.3.5 全局定时器AlarmManager(1) - 51CTO.COM

沒有留言:

張貼留言