【问题标题】:Passing a socket object to another activity on Android将套接字对象传递给 Android 上的另一个活动
【发布时间】:2014-12-03 04:24:26
【问题描述】:

提前感谢您的帮助。

在 Android 的 Activity 之间传递对象的最佳做法是什么?我读到了将可序列化对象作为字符串传递的可能性,方法是通过 putExtras 将它们添加到包中,而不是用它开始下一个意图。但是 Socket 是可序列化的吗?

我想传递 Socket 、 PrintWriter 、 BufferedReader 的实例,在主要活动打开连接和输入/输出流之后,以便下一个意图可以关闭等。

我也想知道是否有其他/更好的选择可以考虑,因为我猜有。

谢谢。

【问题讨论】:

    标签: java android eclipse sockets


    【解决方案1】:

    您必须使用公共静态变量或使用单例模式的包装类。

    【讨论】:

    • 谢谢@SimonSays。 1)静态变量的使用是否常见并推荐这样做?使用静态变量有什么缺点? 2)这两个活动我都想在显然扩展 Activity 类之间传递对象。你能给我一个例子,你会如何用另一个带有单例变量的类来包装它们?
    • 1.我不会说推荐使用静态变量,但有时它只是传递对象的最简单方法。就我个人而言,我会尽可能避免使用它,但在某些情况下仍会使用它。缺点是您不知道对象何时会被垃圾收集。 2. 反过来说。您可以将流对象包装在一个单例中,而不是活动。
    【解决方案2】:

    如果你不想启动服务,你可以创建一个全局变量。

    像这样为该套接字创建一个单例模式:

    public class SocketSingleton {
    
    
    private static Socket socket;
    
    public static void setSocket(Socket socketpass){
        SocketSingleton.socket=socketpass;
    }
    
    public static Socket getSocket(){
        return SocketSingleton.socket;
        //return socket;
    }
    

    }

    然后在代码中更改全局值:

            public void changeScreen(Socket socket, String ip, int port) {
            SocketSingleton.setSocket(socket);
            Intent i = new Intent(getActivity().getApplicationContext(), ControlActivity.class);
            i.putExtra("ip", ip);
            i.putExtra("port",port);
            startActivity(i);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-31
      • 1970-01-01
      • 2017-09-07
      • 1970-01-01
      • 2011-02-13
      相关资源
      最近更新 更多