從Android中的documentation of Pending Intent FLAG_CANCEL_CURRENT
:澄清對文檔進行PendingIntent.FLAG_CANCEL_CURRENT
通過取消先前掛起的意圖,這確保了只給新的數據實體將能夠啓動它。如果這個保證不是問題,考慮FLAG_UPDATE_CURRENT
任何人都可以解釋這一行是什麼意思?
從Android中的documentation of Pending Intent FLAG_CANCEL_CURRENT
:澄清對文檔進行PendingIntent.FLAG_CANCEL_CURRENT
通過取消先前掛起的意圖,這確保了只給新的數據實體將能夠啓動它。如果這個保證不是問題,考慮FLAG_UPDATE_CURRENT
任何人都可以解釋這一行是什麼意思?
一旦你創建了一個新的PendingIntent
與FLAG_CANCEL_CURRENT
,什麼都持有相同Intent
以前PendingIntent
將不再能夠執行該原始PendingIntent
。
例如,假設我們有這樣的:
Intent i=new Intent(this, Foo.class);
i.putExtra("key", 1);
PendingIntent pi=PendingIntent.getActivity(this, 0, i, 0);
,我們使用PendingIntent
有,比方說,一個Notification
。
後來,我們執行:
Intent i=new Intent(this, Foo.class);
i.putExtra("key", 2);
PendingIntent pi2=PendingIntent.getActivity(this, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);
在這一點上,獨創了PendingIntent
(pi
)不再有效,而無論我們使用pi2
用於將看到更新的額外價值(2
)。
相反,如果我們這樣做:
Intent i=new Intent(this, Foo.class);
i.putExtra("key", 2);
PendingIntent pi2=PendingIntent.getActivity(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
在這一點上,pi
和pi2
都表示相同PendingIntent
,都將看到更新的額外價值(2
)。
或者,如果我們這樣做:
Intent i=new Intent(this, Foo.class);
i.putExtra("key", 2);
PendingIntent pi2=PendingIntent.getActivity(this, 0, i, 0);
在這一點上,pi
和pi2
仍然代表同一PendingIntent
,但演員是不變的,如getActivity()
返回原PendingIntent
而不應用新的附加功能。
大多數情況下,FLAG_UPDATE_CURRENT
是一個很好的答案,當您嘗試替換PendingIntent
內部的臨時演員時。
Intent i = new Intent(this,Foo.class); i.putExtra(「key」,1); PendingIntent pi = PendingIntent.getActivity(this,0,i,0); AlarmManager am = Context.getSystemService(Context.ALARM_SERVICE); am.set(ELAPSED_REALTIME,mTime,pi); Intent i = new Intent(this,Foo.class); i.putExtra(「key」,2); PendingIntent pi2 = PendingIntent.getActivity(this,0,i,PendingIntent.FLAG_CANCEL_CURRENT); am.set(ELAPSED_REALTIME,mTime1,pi2); am.set(ELAPSED_REALTIME,mTime1,pi2); 那麼,現在當鬧鐘管理器在時間mTime到期時,掛起的意圖pi將不會被調用? – pikini 2013-02-24 14:38:14
@pikini:我期望'PendingIntent.CanceledException'會被拋出。據推測,「AlarmManager」有處理這個問題的邏輯。但是,如果你想取消一個鬧鐘,最好調用'cancel()'而不是讓'AlarmManager'處理這個異常,恕我直言。 – CommonsWare 2013-02-24 14:40:40
感謝您的回答。我會嘗試這樣做並分享我的結果。感謝您的時間回覆。 – pikini 2013-02-24 14:51:44
@VikalpPatel - 你的編輯錯了 - OP是對的 - 請注意 – 2013-03-17 23:19:05