Помогите с архитектурой моего приложения для Android - PullRequest
1 голос
/ 24 июля 2011

Я хотел бы написать приложение, чтобы следить за ценой списков акций.Было бы три действия, содержащие списки акций:

  • myStocksActivity, содержащее акции, которые меня интересуют
  • searchStocksActivity, содержащее список акций, которые я мог бы добавить в список, содержащийся в myStocksActivity
  • winnersLoosersStocksActivity, содержащее список акций с лучшими или худшими показателями дня.

Я хотел бы сохранить список акций в myStocksActivity, чтобы иметь возможность удалять или добавлять акциииз этого списка и для добавления акций, отображаемых в искеStocksActivity или winnersLoosersStocksActivity, в myStocksActivity.

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

На данный момент моя архитектура не велика: почти вся логика содержитсяв myStocksActivity, и я знаю, что это нехорошо.

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

Что ты думаешь?Моя проблема ясна?Спасибо!

Ответы [ 3 ]

1 голос
/ 24 июля 2011

Если бы я был вами, я бы сначала попытался спроектировать (и построить) модель предметной области.Это должно стать набором классов, который позволяет вам делать все, что вы хотите с вашими акциями, независимо от пользовательского интерфейса.Вы также должны встроить постоянство данных непосредственно в эти классы (я предлагаю использовать SQLite для этого бита).

Затем, когда у вас есть рабочая модель, создайте пользовательский интерфейс поверх этого.Шаблон проектирования MVP довольно хорошо работает с Android.

Реализуйте свои действия в виде представлений, они должны как представлять данные, так и захватывать события пользовательского интерфейса и делегировать эти события экземплярам Presenter, которые затем сообщают / манипулируют моделью и соответствующим образом обновляют представления.Например,

MyStocksView может предоставить пользователю список акций и последние изменения цены акций (или что-то еще).MyStocksView содержит фактические виджеты, которые составляют пользовательский интерфейс, а также выступает в качестве прослушивателя и обработчика событий для различных событий пользовательского интерфейса (например, когда пользователь нажимает кнопку).Он также должен содержать экземпляр класса MyStocksPresenter.

Как только пользователь нажимает кнопку, скажем, «удалить запас», обработчик событий MyStocksView затем запускает метод в экземпляре презентатора, например, Presenter.removeStock (id), этот метод обновляет модель(удаляет его из структур данных и базы данных в памяти) и, наконец, если все прошло успешно, обновляет представление.По сути, он работает как посредник между уровнем представления и моделью данных.

Что касается автоматических обновлений каждые X минут, я бы справился с этим с помощью AsyncTask, в действительности нет особого смысла в использованиисервис, если вы хотите, чтобы это происходило только во время работы приложения.

0 голосов
/ 24 июля 2011
  1. Создать класс для акции и хранить там логику обновления
  2. Я бы поместил обработчик - который содержит экземпляры класса запасов и циклы над набором, чтобы сказать им обновить- либо в своем собственном классе исключительно со статическими методами и переменными, либо также в классе акций со статическими методами / и т. д.
  3. Служба затем содержит информацию о синхронизации и вызывает статический метод update ()
  4. Операция, которая отображает акции, запускает / останавливает службу с помощью onCreate / onDestroy или onUpdate / onPause (я думаю, что это обновление; включение происходит каждый раз, когда действие выводится на первый план)
  5. То же действие сообщаеткласс-обработчик, который загружается, и использует его список для отображения.

Еще одна вещь: я бы рекомендовал не использовать службу.Используйте AsyncTask.Сервисы действительно работают в потоке пользовательского интерфейса, поэтому, если во время обновления будет продолжительный цикл, пользовательский интерфейс будет зависать.AsyncTask запускает поток и не блокирует пользовательский интерфейс.

0 голосов
/ 24 июля 2011

Всякий раз, когда ваша основная деятельность приостанавливается (или уничтожается), звоните StopService(blabla);.Таким образом, вы можете сохранить его как службу, и он не будет работать в фоновом режиме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...