Должен ли я использовать службу как способ доступа к сетевым данным?

Я новичок в разработке Android, и я пытаюсь создать очень простое приложение, которое будет просматривать мою сеть на наличие серверов DLNA и позволит мне просматривать каждый сервер DLNA в виде каталога. Идея довольно проста: одно действие отображает все серверы DLNA в сети, пользователь выбирает один, затем мы перенаправляемся к другому действию, которое просматривает каталоги медиасервера DLNA.

Мой вопрос довольно прост: как мне сохранить информацию, такую ​​​​как «выбранный сервер», «текущий каталог» и другие подобные вещи? Мне просто нужен способ, чтобы остальная часть моего приложения знала, что делать. Должен ли я встраивать эти данные в службу? Похоже, это нарушает общее понимание того, какими должны быть сервисы. Как я могу/должен сохранять состояние приложения?


person Naftuli Kay    schedule 10.02.2011    source источник


Ответы (1)


У вас есть несколько вариантов. Мне кажется, что мне больше всего нравится то, что вы просто передаете эти значения в объект Intent, который вы отправляете из одного действия в другое. Таким образом, действие, которое просматривает каталоги медиасервера DLNA, получает выбранный сервер в намерении, и если оно исходит от действия списка DLNA, это прекрасно, но намерение может исходить от любого другого действия, которое хочет показать каталоги медиасервера пользователю. пользователь. Очень постарайтесь инкапсулировать функциональность внутри активности, чтобы она не зависела от остальной части приложения для данных.

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

Пара других вариантов — настроить одноэлементные классы, которые содержат ваши общие значения и на которые может ссылаться каждое действие, или, в крайнем случае, вы можете расширить класс Application и создать геттеры и сеттеры, чтобы сделать значения доступными в вашем приложении. Я говорю в крайнем случае, потому что Application — важный класс в Android, который лучше оставить в покое, чтобы случайно не сломать что-то сейчас или в будущем.

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

person Dave MacLean    schedule 10.02.2011
comment
Отличный ответ :) Я полагаю, я бы просто продолжал передавать данные, как снежный ком, добавляя все соответствующие данные по мере необходимости к переданному намерению? - person Naftuli Kay; 10.02.2011
comment
Я бы сказал да на это. Хотя это может быть неправдой, что все, что пришло в одно действие, должно быть передано в следующее действие. - person Dave MacLean; 10.02.2011