Я хотел бы, чтобы все мои действия (от 7 до 10 разных экранов) отправляли данные «контроллеру» (извините, если я не использую этот термин).

Внутри указанного контроллера данные будут либо загружены, либо сохранены в данные для загрузки при отсутствии интернета.
Контроллер будет выполнять проверки и обработку, например:

  • Проверка действительной сессии.
  • Прикрепите другие необходимые учетные данные перед загрузкой и т. Д. Данные сеанса / пользователя будут храниться в файле общих настроек, на который ссылается контроллер.

Моя цель состоит в том, чтобы Activity не делали ничего, кроме сбора данных и асинхронного вызова соответствующего метода (с объектом данных). Контроллер будет знать, как обрабатывать данные для загрузки или сохранения в базе данных.

Будет ли размещение этих методов в расширении Application плохой идеей?

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

0
user2484014 7 Авг 2013 в 04:27
Я бы рекомендовал использовать IntentService для загрузки и использовать BroadcastReceiver для "прослушивания" сетевых изменений. То, как и где вы храните ожидающие загрузки, будет зависеть от типа и количества данных, которые нужно загрузить.
 – 
Squonk
7 Авг 2013 в 04:45

1 ответ

Лучший ответ

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

  • Используя ContentProvider для ваших данных, < a href = "http://developer.android.com/training/id-auth/custom_auth.html" rel = "nofollow"> AccountAuthenticator , а затем синхронизируйте с сервером с помощью SyncAdapter. Преимущества - хорошая абстракция, независимость от действий и множество встроенных функций (например: Android выполняет ваш код без значительного влияния на время автономной работы). Тем не менее, реализация всего этого поначалу - довольно большая работа. Если вы не хотите использовать ContentProvider, тот же метод работает с реализация заглушки, то же самое касается AccountAuthenticator.
  • Используя Service, возможно, IntentService для ваших нужд загрузки. Преимущество в том, что Сервис имеет независимый жизненный цикл и, следовательно, не имеет прямого отношения к вашей Деятельности; Сервис может быть перезапущен, если он был отключен системой. Еще больше работы, чем просто использование некоторых статических методов.
  • Использование статического метода в том виде, в котором вы его предлагаете (в вашем случае объект Application; не полностью статический, но сравниваемый). Довольно простой в реализации, вероятно, лучший способ, если есть похожие задачи в нескольких действиях; ваши AsyncTask могут отправлять свои результаты непосредственно к деятельности, которая его запустила. Однако не подходит для длительных задач.
  • Реализация в рамках Деятельности; Если код используется только один раз; указаны только для полноты, а не для вашего случая. В основном то же самое, что и при использовании статического метода.

Это те, которые приходили мне в голову, могут быть и другие. Не стесняйтесь добавлять / предлагать дополнительные.

1
dst 7 Авг 2013 в 04:47
Я отметил это как ответ, поскольку он касался моей основной проблемы. "Это плохая идея." Однако вы нашли несколько неплохих решений. Интересно, могу ли я задать несколько дополнительных вопросов. Я добавлю их в свой исходный пост.
 – 
user2484014
7 Авг 2013 в 07:00
Прокомментируйте здесь или @ - упомяните меня, когда возникнут ваши вопросы
 – 
dst
7 Авг 2013 в 07:20
Где мои манеры? ... Большое спасибо за подробный ответ. Я думаю, что хочу использовать IntentService, поскольку он хорошо подходит для конечной цели. Думаю, я просто зависаю, потому что наш веб-сервис немного необычный. Я не просто отправляю команду и объект данных. Некоторые данные, которые я передаю, являются частью команды ... / sigh .net folk (шучу). В любом случае меня почему-то слишком беспокоят 2-3 звонка, которые отличаются от оценок 5-6, которые все одинаковы. В любом случае мне пора почитать. Еще раз спасибо за ваше время.
 – 
user2484014
7 Авг 2013 в 07:34