代码之家  ›  专栏  ›  技术社区  ›  Khaled

安卓系统:在所有活动中使用一个套接字连接

  •  3
  • Khaled  · 技术社区  · 13 年前

    基本思想是,当应用程序启动时,一个类将简单地建立到服务器的套接字连接,并定义输出和输入流,这些流应该通过所有需要交互的不同活动来访问,因此套接字必须始终处于活动状态并准备就绪。

    到目前为止,我的想法是创建一个只创建套接字和连接的类:

    public class connection {
        private  String HostIPaddress = "XXX.XXX.XXX.XXX";
        private  int PORT = XXXX;
        public  Socket sock = null;
        public  DataOutputStream out = null;
        public  DataInputStream in = null;
    
        public void assignStreams(){
            try{
                sock = new Socket(getHostIPaddress(),getPORT());
                out = new DataOutputStream(sock.getOutputStream());
                in = new DataInputStream(sock.getInputStream());
            }catch (Exception ex) {
                Log.i("Connection Error",ex.toString());
            }
          }
        }
    

    然后从首先运行的活动中,创建一个此类的静态对象,所有其他活动都可以访问该对象。。听起来这会奏效,但我希望能有更多的想法或反馈?

    2 回复  |  直到 13 年前
        1
  •  2
  •   Deepak Bala    13 年前

    不,不是个好主意。用户可以在任何时候关闭互联网,而您的课程正在使用网络连接,而此时可能根本不需要网络连接。插座之后的清理也是不可能的。你怎么知道什么时候 close()

    你最好根据需要创建这些。您的类的封装性也很差。

    public  Socket sock = null;
    public  DataOutputStream out = null;
    public  DataInputStream in = null;
    

    这些流可以在任何时候重新分配。用getters()和setters()保护它们。

        2
  •  1
  •   Joey Roosing    13 年前

    我不知道为什么这不可能。

    我不知道这是不是个好主意。

    我的两分钱就是创建一个singleton类。

    singleton pattern example

    文章的学分转到 http://www.javacoffeebreak.com/

    除了它们的裸机实现之外,请确保您有一个检索套接字的方法,同样重要的是,关闭套接字。当你的应用程序被破坏时,你可以这样做。我相信应用程序对象的onDestroy方法是一个很好的地方,因为据我所知,这将是在应用程序完全耗尽内存之前调用的最后一个onDestroy方法。

    话虽如此。。如果你的应用程序崩溃了怎么办?你需要以某种方式清理。 按需创建套接字可能是最安全的方法。

    请注意,如果您有一个在整个活动中始终打开的套接字,那么很容易忘记需要关闭它。另一个原因是按活动而不是全局管理套接字。