Я рассматриваю возможность использования удаленного сервиса в своем приложении, но я видел ответ CommonsWare в this thread (и других потоках), что, кажется, удаленная служба имеет много недостатков/проблем, таких как потерянный процессор, память и время автономной работы. Это заставило меня смутиться. Поэтому я хочу, чтобы мои эксперты сначала предложили экспертам:Насколько плохо удаленная служба?
Вопрос №1: Учитывая приложение моего приложения (см. Ниже), вы думаете, что это плохая идея использования удаленного сервиса? Или это правильный путь?
Мое приложение состоит из двух частей: клиент Wi-Fi работает на ПК, а на Android - сервер Wi-Fi. Они переносят файлы данных приложения, расположенные на карте памяти SD, вперед и назад через Socket. Android-приложение имеет более 48 000 строк кода, довольно большой, я бы сказал. Когда он запускается, он автоматически запускает службу. Затем служба создает отдельный поток, который вызывает ServerSocket.accept()
для прослушивания в строке. Пользователь может нажать кнопку на ПК, чтобы инициировать передачу файлов, даже если приложение Android не запущено.
Я понимаю, что жизненный цикл службы не зависит от деятельности '; Я не возражаю, если пользователь может убить приложение и услугу через «Настройки» - он убил его, ему придется снова запустить приложение, чтобы запустить сервер. Он решил убить его, он начнет его сам.
Но что делать, если система Android убила процесс без каких-либо знаний пользователя? В этом случае пользователь не знает, что сервер Wi-Fi мертв, он получит сообщение об ошибке при нажатии кнопки на ПК. Поэтому я хочу, чтобы сервер продолжал работать, даже когда процесс был убит системой. Поэтому, я думаю, что удаленная служба - это ответ. Или это?
Вопрос №2: Как установить простую одностороннюю связь между приложением и удаленным сервисом?
Единственное сообщение между ними - это приложение должно знать статус службы, например, если он прослушивает Socket, или если он все еще работает и т. Д. Если он мертв, пользователь может перезапустить его из пользовательского интерфейса приложения.
Я не хочу использовать AIDL, это кажется излишним; глобальные переменные не работают, потому что они не находятся в одном и том же пространстве процессов; даже синглтон Application
не работает. Поэтому сейчас я думаю об использовании общих настроек или создании файла во внутреннем хранилище. Мне не нужно экспериментировать с этой идеей, но будут ли они работать? Если нет, то какие-нибудь лучшие идеи?
Благодарим вас за это!
благодарим за отзыв.Да, обслуживание переднего плана кажется лучшим решением. Он не занимает лишнее пространство памяти и, возможно, может жить довольно долго, должно быть достаточно хорошим для моей цели. Большое спасибо. – wwyt
@Yury Я просто хочу отправить изображения в фоновом режиме и показать статус пользователя конкретной загрузки в строке списка, я хочу сказать, что http-связь с использованием службы, а также уведомить пользователя о пользовательском интерфейсе, то я должен использовать право переднего плана? Дистанционное обслуживание не требуется. я прав? – Ankit
У меня также есть тот же вопрос, что и Ankit. Я также хотел бы быть уверенным в этом. – thekevshow