pendingintent使用的三種狀況html
你能夠經過getActivity(Context context, int requestCode, Intent intent, int flags)系列方法從系統取得一個用於啓動一個Activity的PendingIntent對象,android
能夠經過getService(Context context, int requestCode, Intent intent, int flags)方法從系統取得一個用於啓動一個Service的PendingIntent對象app
能夠經過getBroadcast(Context context, int requestCode, Intent intent, int flags)方法從系統取得一個用於向BroadcastReceiver的Intent廣播的PendingIntent對象ui
pendingIntent的第4個參數.net
FLAG_CANCEL_CURRENT:若是當前系統中已經存在一個相同的PendingIntent對象,那麼就將先將已有的PendingIntent取消,而後從新生成一個PendingIntent對象。htm
FLAG_NO_CREATE:若是當前系統中不存在相同的PendingIntent對象,系統將不會建立該PendingIntent對象而是直接返回null。對象
FLAG_ONE_SHOT:該PendingIntent只做用一次。在該PendingIntent對象經過send()方法觸發事後,PendingIntent將自動調用cancel()進行銷燬,那麼若是你再調用send()方法的話,系統將會返回一個SendIntentException。blog
FLAG_UPDATE_CURRENT:若是系統中有一個和你描述的PendingIntent對等的PendingInent,那麼系統將使用該PendingIntent對象,可是會使用新的Intent來更新以前PendingIntent中的Intent對象數據,例如更新Intent中的Extras。ci
AlarmManger啓動定時任務,其經常使用的方法get
(1)set(int type,long startTime,PendingIntent pi);
該方法用於設置一次性鬧鐘,第一個參數表示鬧鐘類型,第二個參數表示鬧鐘執行時間,第三個參數表示鬧鐘響應動做。
(2)setRepeating(int type,long startTime,long intervalTime,PendingIntent pi);
該方法用於設置重複鬧鐘,第一個參數表示鬧鐘類型,第二個參數表示鬧鐘首次執行時間,第三個參數表示鬧鐘兩次執行的間隔時間,第四個參數表示鬧鐘響應動做。相似JAVA的Timer裏面scheduleAtFixedRate(TimerTask task, long delay, long period):以近似固定的時間間隔(由指定的週期分隔)進行後續執行。在固定速率執行中,根據已安排的初始執行時間來安排每次執行。若是因爲任何緣由(如垃圾回收或其餘後臺活動)而延遲了某次執行,則將快速連續地出現兩次或更多的執行,從而使後續執行可以「追遇上來」。從長遠來看,執行的頻率將正好是指定週期的倒數(假定 Object.wait(long) 所依靠的系統時鐘是準確的)。
(3)setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pi);
該方法也用於設置重複鬧鐘,與第二個方法類似,不過其兩個鬧鐘執行的間隔時間不是固定的而已。它相對而言更節能(power-efficient)一些,由於系統可能會將幾個差很少的鬧鐘合併爲一個來執行,減小設備的喚醒次數。 有點相似JAVA的Timer裏面schedule(TimerTask task, Date firstTime, long period):根據前一次執行的實際執行時間來安排每次執行。若是因爲任何緣由(如垃圾回收或其餘後臺活動)而延遲了某次執行,則後續執行也將被延遲。在長期運行中,執行的頻率通常要稍慢於指定週期的倒數(假定 Object.wait(long) 所依靠的系統時鐘是準確的)。
(4)cancel(PendingIntent operation)
取消一個設置的鬧鐘
(5)setTimeZone(String timeZone)
設置系統的默認時區。須要android.permission.SET_TIME_ZONE權限
註解:使用alarmManager啓動service時,用service的action(service在manifest中聲明多個action)來啓動,防止用service.class致使pendingintent相互覆蓋影響的狀況!重要!
小米2S中,setRepeating的intervalTime循環下次的週期,貌似最小是5分鐘,網上有不少人遇到了這個問題!!坑爹!
參考資料