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