2011-02-10 5 views
0

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

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

ответ

2

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

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

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

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

+0

Отличный ответ :) Я полагаю, что я просто продолжаю передавать данные, как снежный ком, добавляя все соответствующие данные, необходимые для прошедшего намерения? –

+0

Я бы сказал, да. Хотя может быть и неверно, что все, что попало в одну активность, должно быть передано в следующую деятельность. –