我已经在这个主题上读了很多,但我似乎无法找到一些可以帮助我的答案。 我已将我的应用程序建模为前端后端。后端只是一个等待传入连接的服务器。问题是我在应用程序启动后立即启动服务器并且不再与它通信。 现在我需要服务器与前端通信告诉它有人连接。我尝试使用静态方法但是由于无法从不同的thead更新de UI而出现错误。 我该怎么办? 编辑:
我的服务器类
public class Server {
public static int uniqueID;
private final int port;
private final Boolean keepWorking;
private final String username;
public Server(int port, String username) {
this.port = port;
this.username = username;
keepWorking = true;
}
public void Start() {
try {
ServerSocket serverSocket = new ServerSocket(port);
while (keepWorking) {
Socket socket = serverSocket.accept();
MainActivity.SomeoneConnected();
}
serverSocket.close();
} catch (IOException e) {
Log.d("Error", e.getMessage().toString());
}
}
}
这就是我需要的一切。服务器告诉前端有人连接
答案 0 :(得分:1)
您应该查看AsyncTasks:
http://developer.android.com/reference/android/os/AsyncTask.html
或任何类型的线程/处理程序实现。 - 网上有很多这样的例子
还要考虑Activity的ruOnUiThread()
方法。
所有这些解决方案都假设您的客户端/服务器架构包含在同一活动中。
**基于您的编辑:
你应该使用MainActivity.SomeoneConnected();
的活动实例调用instance.runOnUiThread()
,或者在Ui线程上创建一个处理程序,并在{{1}内发布一个调用MainActivity.SomeoneConnected();
的runnable使用run()
这是一个如何创建Runnable的示例:
答案 1 :(得分:0)
我强烈建议您使用Google应用引擎和Google云端消息来完成此操作,它对Android有很好的支持,这意味着您无需轮询您的服务器
答案 2 :(得分:0)
Threads之间通信的首选工具是Handler。