Вопрос по android, alarmmanager, android-pendingintent – FLAG_CANCEL_CURRENT или FLAG_UPDATE_CURRENT

7

Мое приложение устанавливает повторяющуюся тревогу при взаимодействии с пользователем, оно может изменить интервал времени, установленный для трансляции с помощью Alarm Manager.

Существует не так много на пути статистов.

Флаг обновления или отмены лучше в этом случае?

Спасибо

Что значит 'Там не так много на пути статистов имею в виду? Вы используете дополнения или нет? Nikolay Elenkov
Имейте в виду, что проблема Samsung Lollipop возникает при использовании FLAG_CANCEL_CURRENT. Относится кstackoverflow.com/questions/29344971/... Elye
нет, я не использую дополнения .. Dory

Ваш Ответ

2   ответа
11

Никогда используйте FLAG_CANCEL_CURRENT с PendingIntents, который вы используете при настройке будильника. Если вы хотите перенести будильник на другое время,Тебе вообще не нужен флаг; просто создайте дубликат PendingIntent с нулевыми флагами, а затем используйте его для установки () тревоги: это неявно отменит существующую тревогу, а затем установит ее на новое время. Однако если вы использовали FLAG_CANCEL_CURRENT при создании нового PendingIntent, это нарушит работу диспетчера аварийных сигналов.способность распознать, что это "тот же самый" как отмененный в настоящее время PendingIntent, и вы получите старый, зависший, недоставленный, занимающий память и процессор. Я'Мы видели, как приложения с этой ошибкой встраивают буквально сотни устаревших аварийных сигналов в систему, и этого достаточно, чтобы ощутимо повлиять на производительность и использование памяти.

Если вы просто хотите изменить дополнительные функции без фактической перепланировки существующего аварийного сигнала, для этого есть FLAG_UPDATE_CURRENT. Если вы хотите перенести, нене используйте никаких флагов вообще.

мне жаль; Я неТ довольно следуют. Я написал "это неявно отменит существующую тревогу - это отменяеттревога, не PendingIntent. То, что вы описываете, вы видите - что после использования FLAG_CANCEL_CURRENT предыдущий экземпляр PendingIntent больше не может использоваться - именно поэтому яЯ говорю, что вы не должны использовать этот флаг с PendingIntents, которые связаны с сигналами тревоги. ctate
Ваш ответ звучит вопреки статусу документации AndroidFLAG_CANCEL_CURRENT, У вас есть ссылки на этот ответ? В настоящее время я сталкиваюсь с проблемой, когда я подозреваю, чтоFLAG_UPDATE_CURRENT не обновляет намерение дополнительно должным образом из-за чего я в конечном итоге с неожиданным поведением. Я хочу изменить это, чтобы использоватьFLAG_CANCEL_CURRENT и этокогда я увидел этот ответ. Varun Gupta
Что вы читаете, это звучит противоречиво? d.android.com говорит, что FLAG_CANCEL_CURRENT "гарантирует, что только сущности с новыми данными смогут запустить его " - старый PendingIntent недействителен, будет работать только новый, и .equals () для двух возвращает false. Если у вас есть проблемы с тем, что FLAG_UPDATE_CURRENT не меняет дополнения, это 'Отдельная семантика. ctate
Я нашел ваш комментарий об установке флагов на 0 противоречивым. Вы написали, что если флаги установлены в 0, тоPendingIntent будет отменено неявно, но если флаги установлены вFLAG_CANCEL_CURRENTтогда старый будет болтаться о невозможности доставки. Я написал небольшой тест, в котором я создал два PendingIntents с одинаковымиrequestCode, Когда я устанавливаю флаги в 0, предыдущийPendingIntent был еще действителен, когда я вызывалsend в теме. Когда я устанавливаю флагиFLAG_CANCEL_CURRENT, тогда предыдущее намерение было отменено, и я не смог его отправить. Varun Gupta
13

вы ненужно указать любой из этих флагов. Они изменяют только то, как системы справляются сPendingIntent: заменить те, что находятся в текущем сопоставлении (кэшируется системойPendingIntent) или отмените его и создайте новый. Обратитесь к документации для деталей:http://developer.android.com/reference/android/app/PendingIntent.html#FLAG_CANCEL_CURRENT

Хорошо, я понял ... Спасибо ..! Dory
Более того, использование CANCEL может привести к I 'PendingIntent.CanceledException Mr_and_Mrs_D
мне повезло с отменой, чем обновлением. Просто говорю. Ε Г И І И О
Вызывает ли CANCEL_CURRENT ненужные дополнения из-за действия, удерживающего намерение? Eric Woodruff
Так как он не нуждается в отмене, тоFLAG_UPDATE_CURRENT это путь, в противном случае есть ненужные накладные расходы на создание нового объекта. Mr_and_Mrs_D

Похожие вопросы