2014-01-06 3 views
1

Я хочу обновить определенную строку в ListView (пользовательский класс), когда что-то произойдет в фрагменте ListView или другом (вложенном) фрагменте.Производительность Android IntentFilter

настоящее время я использую этот шаблон (News является пользовательский класс, который NewsView отображает):

  • NewsView конструктор:
    • регистры BroadcastReceiver с IntentFilter, например "UPDATE_NEWS_ITEM"
    • в OnReceive I deserialize News item and compare item ID
  • Действие происходит где-то
    • Я создаю намерение («UPDATE_NEWS_ITEM») и добавляю News элемент как Serializable Extra.

Это означает, что каждый NewsView должна десериализация News от Намерения и, следовательно, этот подход имеет немного накладные расходы.

С другой стороны, я мог зарегистрировать широковещательный приемник для каждого NewsView с IntentFilter, например "UPDATE_NEWS_ITEM_154", где 154 является идентификатором элемента. Тогда намерение трансляции достигнет только одного приемника, и это кажется более эффективным.

Есть ли недостаток в регистрации большого количества приемников вещания? Или Android с удовольствием справится с потенциально сотней из них?

+0

Есть причина, вы не можете использовать 'Interface' между приемником и классом представления списка или создать экземпляр приемника непосредственно в классе и использовать' 'registerReceiver' и unregisterReceiver' ? – Simon

+0

Я упрощал ситуацию, есть несколько классов, в которых отображаются «Новости» и несколько классов, которые генерируют обновление, поэтому я думаю, что нет. – Axarydax

+0

Неужели реализация прослушивателя обратного вызова во всех этих классах - это не больше работы, чем получение намерения? Не зная своей архитектуры, вы могли бы создать базовый класс Activity с слушателем, а затем наследовать от этого? – Simon

ответ

1

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

Насколько я знаю, они переводится непосредственно на вызовы функций и не проходят через очереди ОС.

Подробнее о LocalBroadcastManager here

Смежные вопросы