Android: использование шаблона наблюдателя с представлениями (возможно, MVC, связанные с MVVM)

Я потратил несколько часов на чтение различных вопросов и ответов о внедрении различных шаблонов типа MVC в Android. Я видел несколько примеров кода, размещенных в разных блогах. Тем не менее, я по-прежнему ценю некоторые идеи и мнения о том, чего я пытаюсь достичь. В частности, я хотел бы разработать лучший механизм кода, чтобы сообщить одному представлению или группе представлений о том, что определенный элемент данных был изменен.

Мое приложение довольно простое, которое получает данные измерений с аппаратного устройства через Bluetooth и отображает и регистрирует эти данные. В настоящее время у меня есть Служба, которая занимается связью Bluetooth и фоновым протоколированием. У меня есть «глобальный» класс хранилища данных, который является расширением приложения.

Поскольку данные измерений опрошены от внешнего устройства, данные измерений (на самом деле около тридцати байт данных) обновляются в объекте хранения данных (который в условиях MVC, я предполагаю, является «моделью»).

В любое время в UI Views будет отображаться только небольшое подмножество этих данных. Как правило, данный вид будет интересоваться только представлением одного конкретного байта данных измерений. Когда пользователь перейдет на разные классы активности, будут отображаться другие представления, которые будут отображать другой поднабор этих данных.

Поэтому, чтобы понять, я пытаюсь выбрать лучший способ вызвать invalidate() для вызова в интересующих Представлениях при изменении данного элемента данных.

Возможные варианты:

  1. Используйте существующий класс Observer и связанные классы.

  2. Вид «бросить мой собственный» шаблон наблюдателя, создав мои собственные функции register () и unregister () в модели данных. Представления наблюдателей будут храниться в ArrayList (или, возможно, более сложном расположении одного списка наблюдателей на элемент данных). Я postInvalidate() бы этот ArrayList каждый раз, когда данные будут обновлены, и вызовет invalidate() (или postInvalidate() конечно, в зависимости от моей компоновки потоков).

Есть ли причины, по которым я должен использовать один из вышеперечисленных над другим? И есть ли какой-нибудь другой механизм «наблюдателя», который я должен рассмотреть?

    Многие представления в Android поддерживаются некоторым подклассом BaseAdapter который имеет метод notifyDataSetChanged() который инструктирует представление обновить себя. Если вы используете представление (например, ListView или GridView или любой AdapterView ), то он поддерживается базовым адаптером, и вы можете просто обновить этот адаптер, и представление обновится.

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