2012-01-19 2 views
2

Я рассматриваю возможность использования удаленного сервиса в своем приложении, но я видел ответ CommonsWare в this thread (и других потоках), что, кажется, удаленная служба имеет много недостатков/проблем, таких как потерянный процессор, память и время автономной работы. Это заставило меня смутиться. Поэтому я хочу, чтобы мои эксперты сначала предложили экспертам:Насколько плохо удаленная служба?

Вопрос №1: Учитывая приложение моего приложения (см. Ниже), вы думаете, что это плохая идея использования удаленного сервиса? Или это правильный путь?

Мое приложение состоит из двух частей: клиент Wi-Fi работает на ПК, а на Android - сервер Wi-Fi. Они переносят файлы данных приложения, расположенные на карте памяти SD, вперед и назад через Socket. Android-приложение имеет более 48 000 строк кода, довольно большой, я бы сказал. Когда он запускается, он автоматически запускает службу. Затем служба создает отдельный поток, который вызывает ServerSocket.accept() для прослушивания в строке. Пользователь может нажать кнопку на ПК, чтобы инициировать передачу файлов, даже если приложение Android не запущено.

Я понимаю, что жизненный цикл службы не зависит от деятельности '; Я не возражаю, если пользователь может убить приложение и услугу через «Настройки» - он убил его, ему придется снова запустить приложение, чтобы запустить сервер. Он решил убить его, он начнет его сам.

Но что делать, если система Android убила процесс без каких-либо знаний пользователя? В этом случае пользователь не знает, что сервер Wi-Fi мертв, он получит сообщение об ошибке при нажатии кнопки на ПК. Поэтому я хочу, чтобы сервер продолжал работать, даже когда процесс был убит системой. Поэтому, я думаю, что удаленная служба - это ответ. Или это?

Вопрос №2: Как установить простую одностороннюю связь между приложением и удаленным сервисом?

Единственное сообщение между ними - это приложение должно знать статус службы, например, если он прослушивает Socket, или если он все еще работает и т. Д. Если он мертв, пользователь может перезапустить его из пользовательского интерфейса приложения.

Я не хочу использовать AIDL, это кажется излишним; глобальные переменные не работают, потому что они не находятся в одном и том же пространстве процессов; даже синглтон Application не работает. Поэтому сейчас я думаю об использовании общих настроек или создании файла во внутреннем хранилище. Мне не нужно экспериментировать с этой идеей, но будут ли они работать? Если нет, то какие-нибудь лучшие идеи?

Благодарим вас за это!

ответ

3
  1. Удаленная служба похожа на обычное обслуживание. Единственное отличие (я думаю), что к нему можно получить доступ из других приложений и сервисов (это экспортированная служба). Таким образом, если вы хотите, чтобы несколько приложений имели доступ к вашему сервису, вы можете сделать его удаленным. Но в вашем случае, я думаю, вы можете сделать только услугу для своего приложения. Чтобы ваша служба работала, вы должны посмотреть на услуги переднего плана. Это обычные сервисы, они только начинаются с команды startForeground Эти службы андроидной системы будут стараться работать как можно дольше.

  2. Фактически, в вашем случае это не односторонний. Вы спрашиваете свое обслуживание о состоянии, и служба должна спросить. Если вы выбираете только не удаленный сервис, то в своем приложении вы можете просто вызвать методы обслуживания (extending Binder class). Для удаленной службы я думаю, вы можете использовать либо двух Messenger, либо AIDL.

+0

благодарим за отзыв.Да, обслуживание переднего плана кажется лучшим решением. Он не занимает лишнее пространство памяти и, возможно, может жить довольно долго, должно быть достаточно хорошим для моей цели. Большое спасибо. – wwyt

+0

@Yury Я просто хочу отправить изображения в фоновом режиме и показать статус пользователя конкретной загрузки в строке списка, я хочу сказать, что http-связь с использованием службы, а также уведомить пользователя о пользовательском интерфейсе, то я должен использовать право переднего плана? Дистанционное обслуживание не требуется. я прав? – Ankit

+0

У меня также есть тот же вопрос, что и Ankit. Я также хотел бы быть уверенным в этом. – thekevshow

Смежные вопросы