Comments 5
Мне кажется, что вы некорректно используете AsyncTask. Во-первых в onPostExecute(Void result) у вас Thread.sleep(5000), что сразу же приведет к ANR (application not responding), потому что вы блокируете main thread. Во вторых, вы создаете в AsyncTask новый thread.
Возможно, было бы лучше создать 2 отдельных потока ReadingThread и WritingThread и посылать из них сообщения в Service. Либо делать и запись и чтение в AsyncTask, но последовательно. В этом случае, можно делать broadcast прямо в onPostExecute(). Ну и использовать static variable для передачи команды это не правильно. (config.SOCKET_MESSAGE = ServerCommands.login(«name», «pass»)). Ее следовало бы передать в качастве параметра AsyncTask или прикрепить к сообщению WritingThread.
Возможно, было бы лучше создать 2 отдельных потока ReadingThread и WritingThread и посылать из них сообщения в Service. Либо делать и запись и чтение в AsyncTask, но последовательно. В этом случае, можно делать broadcast прямо в onPostExecute(). Ну и использовать static variable для передачи команды это не правильно. (config.SOCKET_MESSAGE = ServerCommands.login(«name», «pass»)). Ее следовало бы передать в качастве параметра AsyncTask или прикрепить к сообщению WritingThread.
С вами согласен насчет неидеального сокет-клиента, но статья лишь отображение работы передачи данных из сервиса в UI. Сокет-клиент подходящий пример того, для чего может потребоваться такая «связка».
На мой взгляд для таких целей придумали LocalBroadcastManager, который работает только для вашего приложения и нет необходимости обновлять себя через систему.
Sign up to leave a comment.
Сокет-клиент в сервисе и обновление UI через BroadcastReceiver