Android TCP 连接最佳实践

2024-04-16

我正在开发一个需要 TCP 连接到 TCP 服务器的 Android 应用程序(用 Node.js 编写)

我的 Android TCP 客户端正在工作,可以来回发送消息。

我的具体问题是:

  1. 在 Android 中处理与服务器的 TCP 连接的最佳方法是什么?
  2. 如何维护连接(在 onDestroy() 等上正确关闭连接)?
  3. 有没有比使用 AsyncTask 更好的方法(除了普通的 Thread 类,这在 Android 4.0 中是不允许的)

我在 AsyncTask 中有我的套接字连接,如下所示:

@Override
protected Void doInBackground(Void... params) {
        try {
            Log.d("TCP_MESSAGE", "Connecting...");

                socket = new Socket(MY_LOCAL_IP, 8080);
                dataOutput = new DataOutputStream(socket.getOutputStream());

                inputstream = new InputStreamReader(socket.getInputStream());
                input = new BufferedReader(inputstream);


            while (!canceled) {
                String message = input.readLine();
                handleMessage(message);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return null;
}

我在 AsyncTask 中建立连接的原因是因为我使用的是 android 4.0 并且不允许在常规线程中拥有网络代码。


服务应该拥有该连接。如果您需要在应用程序未运行时保持连接,那么您应该将其设为前台服务。如果您不将其设为前台服务,请确保从您的活动中绑定到该服务以使其保持活动状态。

不要忘记该服务也在主(UI)线程上运行,因此您仍然需要一个单独的线程来处理通信。

如果您只有一个 Activity 并且只想处理由于配置更改而导致的重新启动,那么您可以自己处理配置更改,保持非 ui 片段拥有的连接,或使用 onRetainNonConfigurationInstance()/getLastNonConfigurationInstance() 将连接传递给自己)(但是不推荐使用片段)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android TCP 连接最佳实践 的相关文章

  • 如何在android中使用kso​​ap2库解析复杂的响应

    大家好 我正在使用 Ksoap2 库解析以下类型的响应 但没有成功获得结果 我的请求如下
  • Android:创建具有关系的 SQLite 数据库

    我正在尝试创建一个需要具有一对多关系的两个表 SQLite 数据库的应用程序 基本上 第一个表将允许用户创建一名员工 当他们点击该员工时 他们将进入第二个活动 该活动将允许用户为该员工添加多个电话号码 这些电话号码存储在第二个表中 我真的不
  • 使用 Android WebViewClient 启用特定 SSL 协议

    我的应用程序使用WebViewClient与服务器建立 SSL 连接 服务器配置为仅接受 TLSv1 1 及以上协议 使用 Android 时 如何检查哪些 SSL 协议是 a 支持的和 b 默认启用的WebViewClient在设备上 如
  • Camera2设置预览(View)并获取预览回调

    我想从 Camera2 获取预览以及用于处理帧的 byte 回调 mImageReader ImageReader newInstance largest getWidth largest getHeight ImageFormat RAW
  • 如何使用 Android 处理在 Google Cardboard 设备中显示立体图像?

    处理的目的是使使用 Java 绘图变得更加容易 Android 的处理功能具有桌面版的强大功能以及来自传感器的信息 将这些东西放在一起 显示立体图像并像 Oculus Rift 或 Google Cardboard 一样在其周围移动不是很容
  • 在 Marshmallow 中获取蓝牙本地 mac 地址

    在 Marshmallow 之前 我的应用程序将通过以下方式获取其设备 MAC 地址BluetoothAdapter getDefaultAdapter getAddress 现在 随着 Marshmallow Android 的回归02
  • Android 中的垂直和水平滚动视图

    我真的很累了寻找垂直和水平滚动视图的解决方案 我读到框架中没有任何视图 布局实现此功能 但我需要这样的东西 我需要在其他布局中定义一个布局 子布局必须实现垂直 水平滚动才能移动 最初实现了一个逐像素移动布局的代码 但我认为这不是正确的方法
  • 开始使用 Honeycomb 进行 Android 开发 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何通过子 POJO 的属性过滤复合 ManyToMany POJO?

    我有两个像这样的房间实体 Entity public class Teacher implements Serializable PrimaryKey autoGenerate true public int id ColumnInfo n
  • Facebook Android 意图

    我对这个意图有疑问 这个意图是发送文本类型的消息 一切正常 电子邮件 短信 推特以及手机上的任何内容 但唯一有问题的是facebook 它会尝试以链接而不是文本的形式发布 Intent s new Intent android conten
  • jQuery mobile - 仅在侧面板关闭时才允许滚动?

    我不希望用户在任何侧边栏打开时滚动 一旦关闭 他们应该滚动 我使用了下面的代码 但它不适用于 Android 移动设备 document bind panelopen function e data body css overflow hi
  • 点击当前选项卡刷新页面时的 Xamarin.Forms TabbedPage 事件

    我正在使用 Xamarin Forms 构建 iOS Android 应用程序 并有一个 TabbedPage 如果用户已经在选项卡 2 上 并且单击了选项卡 2 并且我希望刷新选项卡 2 或者运行我自己的函数 以便我可以自己刷新它 有没有
  • Webview 电子邮件链接 (mailto)

    我有一个视图并查看该网站有用于发送电子邮件的 malito 代码 当我打开链接时 会出现错误 我希望当我打开链接时打开 Gmail 应用程序或其他电子邮件应用程序 感谢所有帮助者 public class teacher extends A
  • 如何在kotlin中使用Coroutine每秒调用一个函数

    我刚刚创建了一个应用程序 其中我的函数 getdata 每秒调用一次以从服务器获取新数据 而 updateui 函数将更新 UI 中的视图 我在我的应用程序中不使用任何异步任务或协程 我想这样做 请告诉我我怎样才能做到这一点 这是我的代码
  • mgwt - 以编程方式改变方向

    是否可以在 gwt mgwt 应用程序中更改强制执行特定的屏幕方向 可以说我希望用户始终以横向模式使用应用程序 这取决于 是作为phonegap应用程序 而不是在浏览器内部 如果您作为 Web 应用程序运行 则不需要t get any co
  • 如何在NavigationView的菜单项中设置椭圆形?

    我想在 NavigationView 的菜单项中设置 android ellipsize end 在我当前的实现中 当菜单项中的文本太长时 它只是在末尾被剪切 这是我到目前为止所尝试过的
  • 停止前台运行的服务的正确方法是什么

    我正在尝试停止作为前台服务运行的服务 当前的问题是当我打电话时stopService 通知仍然保留 因此 在我的解决方案中 我添加了一个接收器 我正在将其注册到onCreate 在 的里面onReceive 我调用的方法stopforegr
  • 读/写带有特殊字符的.txt文件

    I open Notepad Windows 并写 Some lines with special characters Special 并前往另存为 someFile txt 与Encoding set to UTF 8 在Java中我有
  • 如何将QR码中的3个方块替换为圆圈以使用Paint android使用zxing自定义QR码?

    我用它作为自定义的参考 从方形到圆形使用zxing生成的QR码它是在java中所以我尝试将它转换为在android中使用 使用 zxing 生成具有自定义点形状的 QR 码 https stackoverflow com questions
  • Fragment 的 onSaveInstanceState() 永远不会被调用

    我试图将数据保存在片段的 onSaveInstanceState 中 但该方法从未被调用 有人可以帮忙吗 public class MyFragment extends Fragment Override public View onCre

随机推荐