Android:使用一个套接字连接跨越所有活动

时间:2013-04-10 05:26:09

标签: java android sockets java-server

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

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

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 个答案:

答案 0 :(得分:2)

不,不是个好主意。用户可以在任何时间点关闭互联网,并且当您可能根本不需要网络连接时,您的班级正在使用网络连接。插座后清理也是不可能的。你怎么知道什么时候到close()呢?

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

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

可以随时重新分配这些流。用getters()和setter()保护它们。

答案 1 :(得分:1)

我不知道为什么不可能。

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

按照你的方式实现它的两分钱是,创建一个单例类。

singleton pattern example

该文章的归功于http://www.javacoffeebreak.com/

除了他们的准系统实现之外,请确保您有一个方法来检索您的套接字,同样重要的是,关闭套接字。当您的应用被销毁时,您可以执行此操作。我相信应用程序对象的onDestroy方法是一个很好的做法,因为我记得这将是你的应用程序被完全取出内存之前调用的最后一个onDestroy方法。

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

请注意,如果您的套接字在整个活动期间始终处于打开状态,则很容易忘记您需要将其关闭。管理每个活动的套接字而不是全局的另一个原因。