Я хочу обновить определенную строку в ListView (пользовательский класс), когда что-то произойдет в фрагменте ListView или другом (вложенном) фрагменте.Производительность Android IntentFilter
настоящее время я использую этот шаблон (News
является пользовательский класс, который NewsView
отображает):
NewsView
конструктор:- регистры BroadcastReceiver с IntentFilter, например
"UPDATE_NEWS_ITEM"
- в OnReceive I deserialize
News
item and compare item ID
- регистры BroadcastReceiver с IntentFilter, например
- Действие происходит где-то
- Я создаю намерение («UPDATE_NEWS_ITEM») и добавляю
News
элемент как Serializable Extra.
- Я создаю намерение («UPDATE_NEWS_ITEM») и добавляю
Это означает, что каждый NewsView
должна десериализация News
от Намерения и, следовательно, этот подход имеет немного накладные расходы.
С другой стороны, я мог зарегистрировать широковещательный приемник для каждого NewsView
с IntentFilter, например "UPDATE_NEWS_ITEM_154"
, где 154 является идентификатором элемента. Тогда намерение трансляции достигнет только одного приемника, и это кажется более эффективным.
Есть ли недостаток в регистрации большого количества приемников вещания? Или Android с удовольствием справится с потенциально сотней из них?
Есть причина, вы не можете использовать 'Interface' между приемником и классом представления списка или создать экземпляр приемника непосредственно в классе и использовать' 'registerReceiver' и unregisterReceiver' ? – Simon
Я упрощал ситуацию, есть несколько классов, в которых отображаются «Новости» и несколько классов, которые генерируют обновление, поэтому я думаю, что нет. – Axarydax
Неужели реализация прослушивателя обратного вызова во всех этих классах - это не больше работы, чем получение намерения? Не зная своей архитектуры, вы могли бы создать базовый класс Activity с слушателем, а затем наследовать от этого? – Simon