#android #service #port #listen
#Android #Обслуживание #порт #слушать
Вопрос:
Я хочу знать, как настроить службу Android, которая прослушивает определенный порт, напримерhttp://127.0.0.1:12345
Ответ №1:
Реализуйте свою службу и используйте ServerSocket
класс для прослушивания входящих подключений и для действий в соответствии с ними. Однако не вызывайте ServerSocket.accept()
в своем потоке пользовательского интерфейса. Это приведет к тому, что ваше приложение не будет отвечать. Вместо этого создайте новый поток или, в зависимости от вашего реального сценария, AsyncTask
может быть достаточно.
Комментарии:
1. @Стивен Прентис Привет. ваш ответ действительно помог мне. Я попробовал это
AsyncTask
, и это с треском провалилось. Затем я попробовал это в отдельных потоках, и это сработало как по волшебству. Мне было интересно, почемуServerSocket
это происходит. Конечно, устал от этого в потоке пользовательского интерфейса, и там тоже произошел сбой. Почему это? Что, если я не возражаю, чтобы моя активность зависала, поскольку ее единственная цель — запустить сервер, например, одним нажатием кнопки?2. @JasonKrs: Она должна работать с AsyncTask, при условии, что вы выполняете работу с ServerSocket в doInBackground (). Если бы вы могли поделиться кодом здесь, мы могли бы помочь больше. Что касается потока пользовательского интерфейса, это ограничение (может ждать завершения задачи ~ 5 секунд), которое предоставляет Android, потому что поток пользовательского интерфейса отвечает за множество вещей. Из документации: Система не создает отдельный поток для каждого экземпляра компонента. Все компоненты, которые выполняются в одном процессе, создаются в потоке пользовательского интерфейса, и системные вызовы к каждому компоненту отправляются из этого потока.
3. @uncaughtException Аааа в
doInBackground()
… Я думаю, что, возможно, у меня так не работает… Возможно, именно поэтому произошел сбой… В любом случае, в проекте ht e было сделано много вещей, поэтому я не буду перепрограммировать эту функцию… Я продолжу работать со старомодными потоками. 😉