2013-06-18 3 views
0

Я новичок в разработке Android, поэтому мне хотелось знать, что погода имеет модель, реализующая наблюдаемый - хорошая практика или произойдет this.Can/Should Класс модели в Android расширяет Observable

В моем случае моя модель не является моделью базы данных, а состоянием сервера. У меня есть следующие классы

  • MainActivity - Основной материал
  • FragmentInfo - фрагмент Вид, который имеет текстовое поле
  • ModelServerStatus - простой класс, который содержит логическую переменную и несколько полезную функцию для установки/получения переменных.
  • ThreadCheckServerStatus - поток, который подключается к серверу через UDP и выполняет запись/чтение. Этот поток знает о ModelServerStatus и обновит ModelServerStatus с помощью setStatus. Этот поток всегда работает и спит в течение 5 секунд.

Должен ли я продлить Observable на ModelServerStatus и вызвать извещать каждый раз, когда ModelServerStatus.setStatus(true/false) запускается. Таким образом, MainActivity может быть Observer и обновить FragmentInfo.textView.

Очень простой ModelServerStatus.setStatus() реализация

public void setStatus(boolean newStatus) 
{ 
    // See if the value of the server has changed 
    if (hasStatusChanged(newStatus)) 
    { 
     //Observer Notify 
     setChanged(); 
     notifyObserver(); 
    } 
} 

Мои мысли за этим:

Модель будет уведомлять контроллер для обновления вида

или

ModelServerStatus уведомит MainActivity обновить FragmentInfo

Я также думаю о

Контроллер будет проверять модель для обновления и обновить View, если это необходимо.

Но это звучит неправильно.

Вопрос в том, какова была бы лучшая реализация этой задачи!

Мысли? спасибо за помощь

ответ

1

Я думаю, что бы я сделал в этом случае, есть Service, работающий в фоновом режиме. Это будет поддерживать состояние сервера. Инициализируйте его как false. Вы подключаетесь к серверу, когда это успешно, установите его как true. Опросите его, как вам нужно, установите значение false, когда сервер больше не доступен.

Service должен выстрелить broadcast, когда статус изменится с истины на значение false или наоборот.

В действии (или фрагменте) вы можете register a BroadcastReceiver прослушать broadcast в onResume(). Отмените регистрацию BroadcastReceiver в onPause().

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

ПРЕДУПРЕЖДЕНИЕ

Ведение сети опрос позволит пользователям очень, очень раздражительными. Большинство пользователей удалит ваше приложение для такого поведения.

+0

Удивительно, что это можно сделать в службе +1, но я не уверен, насколько это лучше или хуже, чем моя модель. Также я хочу только, чтобы он опросил только, когда приложение запущено, а не когда оно приостановлено, –

+0

Вы всегда можете остановить службу при паузе. И начните его с резюме. Ваша модель будет в порядке, я уверен. Но общепринятый метод решения долгосрочных сетевых событий - это сервис. В этом случае широко используется метод широковещания, хотя вы можете так же легко создать систему прямой связи. – Knossos

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