Android學習17

1.Timer類與AlarmManager類區別:

如果你學過J2SE的話,那麼你對Timer肯定不會陌生,定時器嘛,一般寫定時任務的時候 肯定離不開他,但是在Android裏,他卻有個短板,不太適合那些需要長時間在後臺運行的 定時任務,因爲Android設備有自己的休眠策略,當長時間的無操作,設備會自動讓CPU進入 休眠狀態,這樣就可能導致Timer中的定時任務無法正常運行!而AlarmManager則不存在 這種情況,因爲他具有喚醒CPU的功能,可以保證每次需要執行特定任務時CPU都能正常工作, 或者說當CPU處於休眠時註冊的鬧鐘會被保留(可以喚醒CPU),但如果設備被關閉,或者重新 啓動的話,鬧鐘將被清除!(Android手機關機鬧鐘不響...)


2.獲得AlarmManager實例對象:

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

3.相關方法講解:

  • set(int type,long startTime,PendingIntent pi):一次性鬧鐘
  • setRepeating(int type,long startTime,long intervalTime,PendingIntent pi): 重複性鬧鐘,和3有區別,3鬧鐘間隔時間不固定
  • setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pi): 重複性鬧鐘,時間不固定
  • cancel(PendingIntent pi):取消AlarmManager的定時服務
  • getNextAlarmClock():得到下一個鬧鐘,返回值AlarmManager.AlarmClockInfo
  • setAndAllowWhileIdle(int type, long triggerAtMillis, PendingIntent operation) 和set方法類似,這個鬧鐘運行在系統處於低電模式時有效
  • setExact(int type, long triggerAtMillis, PendingIntent operation): 在規定的時間精確的執行鬧鐘,比set方法設置的精度更高
  • setTime(long millis):設置系統牆上的時間
  • setTimeZone(String timeZone):設置系統持續的默認時區
  • setWindow(int type, long windowStartMillis, long windowLengthMillis, PendingIntent operation): 設置一個鬧鐘在給定的時間窗觸發。類似於set,該方法允許應用程序精確地控制操作系統調 整鬧鐘觸發時間的程度。

關鍵參數講解

  • Type(鬧鐘類型): 有五個可選值: AlarmManager.ELAPSED_REALTIME: 鬧鐘在手機睡眠狀態下不可用,該狀態下鬧鐘使用相對時間(相對於系統啓動開始),狀態值爲3; AlarmManager.ELAPSED_REALTIME_WAKEUP 鬧鐘在睡眠狀態下會喚醒系統並執行提示功能,該狀態下鬧鐘也使用相對時間,狀態值爲2; AlarmManager.RTC 鬧鐘在睡眠狀態下不可用,該狀態下鬧鐘使用絕對時間,即當前系統時間,狀態值爲1; AlarmManager.RTC_WAKEUP 表示鬧鐘在睡眠狀態下會喚醒系統並執行提示功能,該狀態下鬧鐘使用絕對時間,狀態值爲0; AlarmManager.POWER_OFF_WAKEUP 表示鬧鐘在手機關機狀態下也能正常進行提示功能,所以是5個狀態中用的最多的狀態之一,該狀態下鬧鐘也是用絕對時間,狀態值爲4;不過本狀態好像受SDK版本影響,某些版本並不支持;
  • startTime:鬧鐘的第一次執行時間,以毫秒爲單位,可以自定義時間,不過一般使用當前時間。 需要注意的是,本屬性與第一個屬性(type)密切相關,如果第一個參數對應的鬧鐘使用的是相對時間 (ELAPSED_REALTIME和ELAPSED_REALTIME_WAKEUP),那麼本屬性就得使用相對時間 (相對於系統啓動時間來說),比如當前時間就表示爲:SystemClock.elapsedRealtime(); 如果第一個參數對應的鬧鐘使用的是絕對時間(RTC、RTC_WAKEUP、POWER_OFF_WAKEUP), 那麼本屬性就得使用絕對時間,比如當前時間就表示 爲:System.currentTimeMillis()。
  • intervalTime:表示兩次鬧鐘執行的間隔時間,也是以毫秒爲單位.
  • PendingIntent:綁定了鬧鐘的執行動作,比如發送一個廣播、給出提示等等。 PendingIntent是Intent的封裝類。需要注意的是,如果是通過啓動服務來實現鬧鐘提 示的話,PendingIntent對象的獲取就應該採用Pending.getService (Context c,int i,Intent intent,int j)方法;如果是通過廣播來實現鬧鐘 提示的話,PendingIntent對象的獲取就應該採用 PendingIntent.getBroadcast (Context c,int i,Intent intent,int j)方法;如果是採用Activity的方式來實 現鬧鐘提示的話,PendingIntent對象的獲取就應該採用 PendingIntent.getActivity(Context c,int i,Intent intent,int j)方法。 如果這三種方法錯用了的話,雖然不會報錯,但是看不到鬧鐘提示效果。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章