2

我使用PendingIntentAlarmManager製作鬧鐘應用程序。我知道爲了取消PendingIntent,您需要重新創建它。在我的應用程序中,很像其他許多鬧鐘應用程序,有一個帶有開關的鬧鐘列表可以打開/關閉每個鬧鐘。當切換關閉,我目前重新創建的PendingIntent並使用以下取消:將PendingIntent存儲在對象中供日後檢索以取消警報是否是不好的做法?

Intent intent = new Intent(context, MyBroadcastReceiver.class); 
String id = this.getId().replaceAll("[^0-9]+", ""); 
PendingIntent alarmIntent = PendingIntent.getBroadcast(context, id, intent, 0); 
alarmIntent.cancel(); 

前3行的代碼的上述相信是不必要的。當我切換鬧鐘時,我可以訪問包含該ID的自定義鬧鐘對象以及鬧鐘的其他詳細信息。當我創建新警報時,如果我將新創建的PendingIntent存儲在警報對象中,則可以訪問用於創建警報的PendingIntent,並且只需檢索並將其取消爲1行,如下所示:

this.getPendingIntent().cancel(); 

我不必重新創建意圖,獲取id,或從前面顯示的代碼重新創建PendingIntent。這將最終節省時間和資源(不是很多,但這是一個很好的做法),所以我有幾個問題:

1)將PendingIntent存儲在對象中並在以後使用它而不是重新創建它有什麼問題嗎?這似乎是一個簡單的答案,但我從來沒有見過任何人這樣做過。

2)重新創建我不知道的PendingIntent是否有優勢?

謝謝!

回答

2

將PendingIntent存儲在對象中並在以後使用它而不是重新創建它有什麼問題嗎?

須得Intent沒有一些大規模的有效載荷(例如,在一個額外的Bitmap),你應該確定。

這似乎是一個簡單的答案,但我從來沒有見過任何人這樣做過。

https://github.com/commonsguy/cw-omnibus/tree/v8.7/AlarmManager/Simple,雖然這是一個微不足道的例子。

重新創建我不知道的PendingIntent是否有優勢?

它適用於您沒有PendingIntent的情況。你的過程不會永遠活着。如果您想使用緩存PendingIntent作爲優化,那很好,但如果需要的話,您需要有能力創建PendingIntent

+0

感謝您的幫助!並不知道如何發送消息的人,但你可以看看我的另一個問題:https://stackoverflow.com/questions/45381092/how-to-stop-alarm-from-executing-after-pendingintent-has-被接收的,機器人 – Michael

相關問題