0

我有一个场景,我连续收到短信到我们的手机,现在我已经阅读了这些短信并将数据上传到网络服务。上传数据后,我必须再次上传相同的数据,以验证天气是否保存。

现在我写了一个类似这样的代码..
1)广播接收器将 SMS 保存到 DB(更新 UI 相同)
2)读取 DB 和上传服务,验证它。(使用意图服务,更新 UI 相同)。

以及其他用于发送短信的服务
1) Intentservice 用于检查服务器上的数据并基于它发送短信。
2)更新已保存短信的电话号码状态(更新服务器)。

现在我的问题是..如果我增加每秒接收短信的数量,我的应用程序会发疯,显示 ANR 这不是 logcat 中的错误,有时说 DB 未打开。那么有人可以提出一个很好的设计模型来做同样的事情吗

注意:我已准备好所有代码,所以如果您想查看代码,请告诉我

4

1 回答 1

1

我不明白你为什么两次上传相同的数据。您说您使用 HTTP 上传(我猜是 POST)。然后您的服务器将阻塞,尝试保存数据并返回一个字符串OK,例如成功或KO失败。

ANR 发生在主线程阻塞时,默认情况下Services 和BroadcastReceivers 都在该线程中运行。您可能想查看官方的 Android 文档

关于整体设计,如果收到的短信数量很大,我建议每5分钟左右批量上传一次。您将所有消息放在一个队列中,每 5 分钟一个服务读取队列并上传其内容。这样可以节省大量开销(CPU、内存、带宽、时间),也许您可​​以跟上数据馈送的比例。

请记住,SMS 比 TCP 通信更轻量级,因此如果您的设备真的连续接收 SMS,您可能最终会遇到写入速度跟不上读取速度的情况,最终导致 CPU 饿死并杀死您的设备。系统。

于 2012-09-25T08:55:56.753 回答