我正在尝试创建一个通过套接字与本地服务器通信的
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) { // ... } } }
解决方法
您可以在服务中创建一个线程来监听服务器.第二个线程用于发送命令.然后,对于您的服务,您应该创建一个带有处理程序的主线程.此处理程序将处理来自这两个线程的消息.