سؤال

في تطبيق Android الخاص بي ، أقوم بإعداد إنذار أريد أن يحدث مرارًا وتكرارًا ، وبالتالي باستخدام AlarmManager.setRepeating ().

لا أرغب في تتبع ما إذا كان المنبه قد تم تعيينه بنفسي (يبدو وكأنه فكرة سيئة عرضة للفشل في مرحلة ما) ، ويبدو أنه لا يوجد دعم API للتحقق مما إذا كان هناك إنذار معين قد تم تعيينه بالفعل لـ A Po0 نية.

وبالتالي ، أقوم بإعادة ضبط المنبه بشكل متشائم في كل مرة ينشط فيها تطبيقي:

alarmManager.cancel(pendingIntent);
...
alarmManager.setRepeating(..., pendingIntent); 

سؤال: هل استدعاء setRepeating () Idempotent أي هل أحتاج إلى إلغاء () أي إنذار مسبق أو هل يمكنني الاتصال بأمان فقط setrepeating () والقيام به؟

هل كانت مفيدة؟

المحلول

ال وثائق API تنص على:

إذا كان هناك بالفعل إنذار مجدولة لنفس IntentSender ، فسيتم إلغاؤه أولاً.

أعلم أن هذا ليس واضحًا تمامًا ، لكن ما يقولونه هو ذلك AlarmManager سوف يفحص PendingIntent أنت تمر إلى setRepeating() وإذا كان هناك بالفعل إنذار مجدولة مع متطابقة PendingIntent بعد ذلك سيتم إلغاء هذا المنبه قبل جدولة النهر الجديد. لذلك لا تحتاج إلى إلغاء أي إنذارات سابقة طالما أن المعلقة التي تستخدمها لا تتغير (oldPendingIntent.equals(newPendingIntent) == true)

من عند وثائق API المعلقة:

equals(Object otherObj)
Comparison operator on two PendingIntent objects, such that true is returned then they both represent the same operation from the same package.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top