0

我已经阅读了很多关于这个主题的内容,但我似乎无法找到一些可以帮助我的答案。我已经将我的应用程序建模为前端 - 后端。后端只是一个等待传入连接的服务器。问题是我在应用程序启动后立即启动服务器并且我不再与它通信。现在我需要服务器与前端通信,告诉它有人连接。我尝试使用静态方法,但由于无法从不同的主题更新 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());

    }

}

}

这就是我需要的一切。服务器告诉前端有人连接

4

3 回答 3

1

您应该查看 AsyncTasks:

http://developer.android.com/reference/android/os/AsyncTask.html

或任何类型的线程/处理程序实现。-网上有很多这样的例子

还要考虑ruOnUiThread()Activity的方法。

所有这些解决方案都假设您的客户端/服务器架构包含在同一个活动中。

** 根据您的编辑:

您应该MainActivity.SomeoneConnected();使用您的活动实例调用或在 Ui 线程上创建一个处理程序并发布一个可运行的从方法内instance.runOnUiThread()调用的可使用MainActivity.SomeoneConnected();run()handlerInstance.post(yourRunnable)

以下是如何创建 Runnable 的示例:

如何在 Android 中运行 Runnable 线程?

于 2013-07-04T22:03:55.170 回答
0

我强烈建议你使用谷歌应用引擎和谷歌云消息来做到这一点,它对 Android 有很好的支持,意味着你不必轮询你的服务器

阅读更多:http: //developer.android.com/google/gcm/index.html

于 2013-07-04T21:56:45.203 回答
0

线程之间通信的首选工具是Handler

于 2013-07-04T22:05:31.853 回答