【问题标题】:How can i design tcp messages listener in my Android client?如何在我的 Android 客户端中设计 tcp 消息侦听器?
【发布时间】:2012-04-02 11:56:49
【问题描述】:

我是 Android 新手。 我正在为我的项目开发一个客户端(android)-服务器(java)架构应用程序。我有问题.. 我的 4-5 活动会将 tcp 消息发送到服务器并获得响应以对自己做一些事情。所以我需要一个后台监听器来监听这些消息,然后在这 4-5 个活动中做一些事情。我在哪里可以实现这个监听器线程来响应我的不同活动。将这些 Activites 的子类中的 5 个 AsyncTask 写入消息传递服务器是否是一种好方法? 我认为 1 个线程可以完成这项工作;但是我怎样才能绑定活动.. 是我所说的服务吗?但是当我的应用程序被破坏时,我不想做任何事情。

【问题讨论】:

    标签: android multithreading tcp


    【解决方案1】:

    我编写了一个非常相似的应用程序并使用单例来完成这项工作。创建活动后,调用 Listener.getInstance() 以获取侦听器的实例。如果尚未创建,请创建它。

    在Listener对象中,创建一个线程来做所有的socket通信。当消息可用时,使用处理程序(或其他一些同步机制)将其发送回主 GUI 线程。

    public class Listener implements Runnable, Callback
    {
        String ipAddress;
        int ipPort;
        private listener = null;
        Handler handler;
    
        public Listener
        {
            handler = new Handler(this);
        }
    
        public Listener getInstance()
        {
            if (listener == null)
                listener = new Listener()
            return listener;
        }
    
        public void connect()
        {
            thread = new thread();
            thread.run(this);
        }
    
        public void run()
        {
            socket = new Socket();
            socket.connect(new InetSocketAddress(ipAddress, ipPort));
    
            //do your thread/socket work...
    
            //when a message is available via the socket, post the message back to the main GUI thread using a handler.
            Message msg = new Message();
            //fill the msg with data
            handler.sendMessage(msg);
        }
    
        @Override public boolean handleMessage(Message msg)
        {
            //hand message to current activity
        }
    }
    

    可以在这里找到一个很棒的套接字示例:http://thinkandroid.wordpress.com/2010/03/27/incorporating-socket-programming-into-your-applications/

    作为替代方案,您可以在服务中完成所有这些工作。我刚开始的时候就选择了这条路。对我来说效果很好。

    【讨论】:

    • 感谢您的回答,我开始编写服务来完成所有这些工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 2017-01-11
    • 2020-08-07
    相关资源
    最近更新 更多