【问题标题】:Android: HttpURLConnection or sockets?Android:HttpURLConnection 还是套接字?
【发布时间】:2014-04-26 16:30:16
【问题描述】:

我有一个每 2 秒调用一次 URL 的 Android 应用。 我知道,这会耗尽电池电量。但我需要连接,因为应用程序和网络服务器之间必须始终存在连接。

现在我的问题是:每 2 秒使用“HttpURLConnection”还是使用套接字来实现这一点对性能和电池来说更好吗? 如果是socket,哪个socket? Asynctask,thread,websocket,还是用这种方式?: Socket Programming using android and php

【问题讨论】:

  • 即使您每两秒执行一次也不意味着始终存在连接,因为 http 是无连接协议。每次请求后连接都会关闭。所以更好地解释你需要什么。
  • @greenapps 查看我的回答。看看是否需要改进:)

标签: java android sockets


【解决方案1】:

如果您的目标是 Android 2.3 或更高版本,请务必使用 URLConnection; 对于以下 Android 版本,请考虑使用 Apache HttpClient;

查看此链接了解更多信息here

两者(如果使用正确)都在后台维护会话并使用 ConnectionPooling 帮助您避免每次都建立新的 TCP 会话的开销。 URLConnection 在较新的 android 版本上进行了高度优化,可能最适合您的挑战。

关于 ConnectionPooling 考虑这篇文章here

不要为 http 使用套接字,因为提供的 http 客户端是高度优化的(例如,如果可能,URLConnection 使用压缩);只有当您需要访问不同的协议时,套接字才相关......

【讨论】:

【解决方案2】:

你走错了方向。如果您想每 2 秒监听一次服务器上的任何更改,只需让服务器管理这个东西。您可以使用 XMPP 或修改推送通知来达到此目的。如果您希望每 2 秒后从服务器获取一些数据,您可以使用带有推送通知的有效负载,它允许您在每个通知中使用 4k 数据

【讨论】:

    【解决方案3】:

    据我所知,

    Socket 会不必要地增加复杂性。坚持HttpURLConnection

    至于何时释放连接,
    当您的应用程序失去焦点时执行此操作,例如 onPause()onResume(),并在获得焦点时重新连接。

    【讨论】:

      猜你喜欢
      • 2010-11-06
      • 1970-01-01
      • 2012-07-07
      • 1970-01-01
      • 2014-07-09
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 2013-05-15
      相关资源
      最近更新 更多