【问题标题】:Android: Most efficient way to periodically (in the background) open tcp connection for ~2 minutesAndroid:定期(在后台)打开 tcp 连接约 2 分钟的最有效方式
【发布时间】:2013-11-24 04:41:45
【问题描述】:

我正在开发定期(每 5-10 分钟,取决于用户)向某个服务器发送请求的 Android 应用程序。服务器执行繁重的计算并在大约 2 分钟后发回响应/数据。

我想知道最有效的方法是什么——主要是在电池寿命方面。

我正在编写应用程序,现在,我计划将应用程序作为服务运行,定期打开与服务器的 tcp 连接,然后等待响应(只需保持 tcp 连接打开),然后关闭连接。

我相信有更好的方法来做到这一点(1. 在后台定期运行作业。2. 管理 tcp 连接,其中只有 2 分钟后才会有客户端请求和来自服务器的响应。)。我在网上搜索了这样的东西,但找不到这样的案例(主要是关于tcp连接管理问题)。 同样,我的主要兴趣是电池寿命。

我不得不提一下,就我而言,没有选择使用 GCM 之类的解决方案(客户端发送请求,服务器发送通知,客户端拉取响应)。因此,我认为我必须使用tcp(或udp)连接,我只想知道如何最有效地做到这一点。

有什么建议吗?

顺便问一下,这种应用在电池寿命方面的成本是多少?

【问题讨论】:

  • 推送通知确实是正确的做法。您应该尝试使其成为一种选择。

标签: java android tcp background


【解决方案1】:

您可能想阅读 Android 文章“优化下载以实现高效网络访问”(https://developer.android.com/training/efficient-downloads/efficient-network-access.html)

每 5-10 分钟发送一次数据会耗尽电池电量,等待 2 分钟得到答复会使问题恶化(尤其是在 5 分钟的频率下,这意味着基本上设备的无线电将一直处于使用状态) .

考虑将(密集)计算移至设备。我认为在这种情况下是合理的。或者考虑不那么频繁地发送数据。

无论如何,不​​要让连接保持打开状态 2 分钟。如果您真的想坚持当前的解决方案,让服务器立即返回一个令牌,并在大约 2 分钟后使用该令牌重新查询服务器。

除了让收音机保持工作状态会消耗电池电量之外,您的服务还会阻止设备进入睡眠状态,从而进一步消耗电池电量。也许您需要它来收集要发送到服务器的数据,但另外考虑使用警报让您的服务在设备的默认唤醒时间发送数据。

【讨论】:

  • 问题是我没有控制服务器。现在我必须遵守服务器的规则(令牌选项是不可能的)。
  • 如果令牌选项可以考虑自己注入一个简单的中间人服务器。该服务器将能够返回一个令牌,并且等待几分钟没有问题。顺便说一句,如果套接字必须等待这么长时间,它们不会倾向于超时吗?
猜你喜欢
  • 1970-01-01
  • 2020-05-06
  • 2015-08-13
  • 2016-05-22
  • 1970-01-01
  • 1970-01-01
  • 2017-09-23
  • 2015-03-25
  • 2013-09-26
相关资源
最近更新 更多