处理来自不同线程的UI更新

时间:2013-07-04 21:54:26

标签: android events

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

    }

}

}

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

3 个答案:

答案 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的示例:

How to run a Runnable thread in Android?

答案 1 :(得分:0)

我强烈建议您使用Google应用引擎和Google云端消息来完成此操作,它对Android有很好的支持,这意味着您无需轮询您的服务器

了解详情:http://developer.android.com/google/gcm/index.html

答案 2 :(得分:0)

Threads之间通信的首选工具是Handler