Android从服务器套接字侦听消息

我正在尝试创建一个通过套接字与本地服务器通信的 Android应用程序.通信使用JSON在字符串中传递简单的命令和数据.客户端应不断收听来自服务器的传入消息,并在收到新数据时更新用户界面.

所以我创建了一个网络服务,它是一个后台运行的绑定服务.从我的活动中,我绑定到服务并接收服务对象的实例.服务对象包含允许我向服务器发送命令的实例方法.

我的问题是,如何让我的服务不断监听来自服务器的消息,而不会阻止向服务器发送消息的可能性?

private Socket socket = null;
private PrintWriter out = null;
private BufferedReader in = null;

private Listener listener;

private String host = "10.0.1.4";
private int port = 3000;

public NetworkService() 
{
    try {

        if (socket == null)
        {
        socket = new Socket(this.host,this.port);
        out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getoutputStream())),true);
        in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        }

        if(listener == null)
        {
            listener = new Listener();
            Thread thread = new Thread(listener);
            thread.start();
        }

        } catch (Exception e) {
            // ...
        }
    }
}

public class Listener implements Runnable
{

    @Override
    public void run() {

        try {
            String line = null;

            while((line = in.readLine()) != null)
                {
                // Do something. Never gets here

                }
            } catch (Exception e) {
                // ...
            }

        }

    }

解决方法

您可以在服务中创建一个线程来监听服务器.第二个线程用于发送命令.然后,对于您的服务,您应该创建一个带有处理程序的主线程.此处理程序将处理来自这两个线程的消息.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...