Должен ли я использовать Сервис как способ доступа к сетевым данным?
Я несколько новичок в разработке под Android и пытаюсь создать очень простое приложение, которое будет просматривать мою сеть на наличие серверов DLNA и позволять мне просматривать каждый сервер DLNA как каталог. Идея довольно проста: одно действие отображает все серверы DLNA в сети, пользователь выбирает один, а затем мы перенаправляем на другое действие, которое просматривает каталоги медиа-сервера DLNA.
Мой вопрос довольно простой: как мне сохранить информацию, такую как "выбранный сервер", "текущий каталог" и другие подобные вещи? Мне просто нужно, чтобы остальная часть моего приложения знала, что делать. Должен ли я встроить эти данные в службу? Кажется, что это нарушает общее понимание того, какие услуги должны быть. Как я могу / должен сохранить состояние приложения?
1 ответ
У вас есть несколько вариантов. Мне больше всего нравится то, что вы просто передаете эти значения в объекте Intent, который вы отправляете от одного действия к другому. Таким образом, действие, которое просматривает каталоги медиа-сервера DLNA, получает выбранный сервер в намерении, и если это произошло из действия со списком DLNA, это здорово, но намерение может исходить из любого другого действия, которое хочет показать каталоги медиа-сервера для пользователь. Старайтесь изо всех сил инкапсулировать функциональность внутри действия, чтобы данные не зависели от остальной части приложения.
Если в приложении есть данные, которые вам действительно нужны, взгляните на SharedPreferences. Они могут быть отображены пользователю, чтобы они могли делать выбор, который сохраняется при вызовах вашего приложения, и любая активность в вашем приложении может легко прочитать настройки и быть в курсе. Однако не все параметры должны отображаться. Вы всегда можете создать редактор предпочтений, чтобы читать и писать свои собственные предпочтения, даже не показывая их пользователю.
Несколько других вариантов - настроить одноэлементные классы, которые содержат ваши общие значения, и к которым может относиться каждое действие, или, в качестве крайней меры, вы можете расширить класс Application, а также создать методы получения и установки, чтобы сделать значения доступными в вашем приложении. Я говорю в крайнем случае, потому что Application - это важный класс в Android, который лучше оставить в покое, чтобы случайно не сломать что-либо сейчас или в будущем.
Чтобы ответить на другой вопрос, вы должны не только использовать службы для доступа к сети, но и создавать потоки. Служба Android по умолчанию не включает фоновый поток, вам нужно сделать это самостоятельно. Вы никогда не должны делать сетевые вызовы из основного потока (он же UI).