Я провел несколько часов, читая различные вопросы и ответы, касающиеся реализации различных шаблонов MVC-типа в Android. Я видел несколько примеров кода, размещенных в различных блогах. Я, однако, все еще буду признателен за некоторые идеи и мнения о том, чего я пытаюсь достичь. В частности, я хотел бы разработать лучший механизм кода для информирования одного представления или группы представлений о том, что конкретный элемент данных был изменен.
Мое приложение довольно просто, которое получает данные измерений от аппаратного устройства через Bluetooth, а также отображает и регистрирует эти данные. В настоящее время у меня есть служба, которая заботится о связи Bluetooth и фоновой регистрации. У меня есть «глобальный» класс хранилища данных, который является расширением Application.
По мере того, как данные измерений опрашиваются с внешнего устройства, данные измерений (которые на самом деле составляют около тридцати байтов данных) обновляются в объекте хранилища данных (который, с точки зрения MVC, я предполагаю, является «моделью»). ).
В любое время представления UI отображают только небольшое подмножество этих данных. Как правило, данное представление будет заинтересовано только в представлении одного конкретного байта данных измерения. Когда пользователь переходит к другим классам Activity, будут отображаться другие представления, которые будут отображать другое подмножество этих данных.
Итак, чтобы добраться до сути, я пытаюсь выбрать лучший способ вызвать invalidate()
для заинтересованных представлений при изменении данного элемента данных.
Возможны следующие варианты:
Используйте существующий класс Observer и связанные с ним классы.
В некотором роде «свернуть мой собственный» шаблон наблюдателя, создав собственные функции register () и unregister () в модели данных. Представления наблюдателей будут храниться в ArrayList (или, возможно, в более сложном расположении по одному списку наблюдателей на элемент данных). Я бы перебирал этот ArrayList каждый раз, когда данные обновлялись, и вызывал invalidate()
(или, конечно, postInvalidate()
, в зависимости от моего механизма потоков).
Есть ли причины, по которым я должен использовать одно из перечисленных выше над другим? И есть ли другой механизм «наблюдателя», который я должен рассмотреть?