Огромная задержка выполнения уведомления deleteIntent на носимом устройстве (~5 секунд)

Я создаю уведомления на носимых по ряду веских причин. Так как я показываю то же самое на мобильном телефоне, мне нужно синхронизировать удаление уведомлений. Я заметил, что между удалением уведомления на носимом и мобильном телефоне проходит много времени. Сначала я подумал, что это связано с DataAPI, который я использую, но я ошибся. Намерение удаления вызывается с огромной задержкой, и я не знаю почему.

Здесь проверьте мой (очищенный) вывод logcat:

-- Wearable --
09:31:45.007 D/FitnessWatchface﹕ onVisibilityChanged : false
09:31:48.008 D/FitnessWatchface﹕ onVisibilityChanged : true
09:31:52.929 D/NotificationHelper﹕ Got action my.package.name.NOTIFICATION_DISCARDED
09:31:52.963 D/DataAPI﹕ Discard message send out to mobile
09:31:53.052 I/art﹕ WaitForGcToComplete blocked for 10.697ms for cause DisableMovingGc
09:31:53.071 D/DataAPI﹕ Wrote successful wear://1d8...5d7/notification/discard/2
09:31:53.073 D/DataLayerListener﹕ onDataChanged invoked

-- Smartphone --
09:31:53.075 D/DataLayerListener﹕ onMessageReceived: /notification/discard/2
09:31:53.075 D/DataLayerListener﹕ Forwarding DISCARD event to receiver...
09:31:53.075 D/Broadcast﹕ Got DISCARD for type 
09:31:53.075 D/NotificationHelper﹕ removeNotification()
09:31:53.165 D/DataLayerListener﹕ onDataChanged: wear://1d8...5d7/notification/discard/2
09:31:53.165 D/DataLayerListener﹕ Forwarding DISCARD event to receiver...
09:31:53.165 D/Broadcast﹕ Got DISCARD for type 
09:31:53.165 D/NotificationHelper﹕ removeNotification()

Как вы можете видеть, циферблат становится видимым, и для записи следующего вывода logcat требуется около 5 секунд.

Вот код, где я создаю отложенное намерение для удаления:

Intent intent = new Intent(context, NotificationHelper.class);
intent.setAction(NOTIFICATION_DISCARDED);
intent.putExtra(NOTIFICATION_INPUT_TYPE, type);
// prevents that the intent is overridden by the system with similar ones
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
return PendingIntent.getBroadcast(context, 6434, intent, PendingIntent.FLAG_ONE_SHOT);

Вы видите что-то, что объясняет задержку? Если вы хотите увидеть больше кода, оставьте комментарий.

Я только что сравнил, прежде чем задавать этот вопрос, сроки сопоставлены, например, с WhatsApp. Задержка тоже есть, но, кажется, немного быстрее (но я ее не измерял).

1 ответ

После отклонения уведомления об износе Android у пользователя есть 5 секунд, чтобы отменить действие. Если вы проведете пальцем вниз после отклонения уведомления, на нем должна появиться кнопка отмены.

Другие вопросы по тегам