Я хотел бы, чтобы все мои действия (от 7 до 10 разных экранов) отправляли данные «контроллеру» (извините, если я не использую этот термин).
Внутри указанного контроллера данные будут либо загружены, либо сохранены в данные для загрузки при отсутствии интернета.
Контроллер будет выполнять проверки и обработку, например:
- Проверка действительной сессии.
- Прикрепите другие необходимые учетные данные перед загрузкой и т. Д. Данные сеанса / пользователя будут храниться в файле общих настроек, на который ссылается контроллер.
Моя цель состоит в том, чтобы Activity не делали ничего, кроме сбора данных и асинхронного вызова соответствующего метода (с объектом данных). Контроллер будет знать, как обрабатывать данные для загрузки или сохранения в базе данных.
Будет ли размещение этих методов в расширении Application плохой идеей?
Было упомянуто, что в зависимости от размера приложения это возможно, но могут быть и лучшие решения.
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
могут отправлять свои результаты непосредственно к деятельности, которая его запустила. Однако не подходит для длительных задач. - Реализация в рамках Деятельности; Если код используется только один раз; указаны только для полноты, а не для вашего случая. В основном то же самое, что и при использовании статического метода.
Это те, которые приходили мне в голову, могут быть и другие. Не стесняйтесь добавлять / предлагать дополнительные.
Похожие вопросы
Новые вопросы
android
Android — это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфонов, планшетов, автомобилей, телевизоров, одежды, очков, IoT). Для тем, связанных с Android, используйте теги, специфичные для Android, такие как android-intent, android-activity, android-adapter и т. д. Для вопросов, отличных от разработки или программирования, но связанных с Android framework, используйте эту ссылку: https://android .stackexchange.com.
IntentService
для загрузки и использоватьBroadcastReceiver
для "прослушивания" сетевых изменений. То, как и где вы храните ожидающие загрузки, будет зависеть от типа и количества данных, которые нужно загрузить.