网络激烈运营Android

时间:2012-09-25 08:05:35

标签: android android-service

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

现在我写了一些类似的代码..
1)广播接收器将SMS保存到DB(更新UI) 2)读取数据库的服务并上传,验证它。 (使用意向服务,更新UI)。

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

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

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

1 个答案:

答案 0 :(得分:1)

我无法理解你为什么两次上传相同的数据。你声明你上传了HTTP(我猜这是一个POST)。然后你的服务器将阻塞,尝试保存数据并返回一个字符串OK如果成功,或KO如果失败。

ANR发生在the main thread blocks时,默认情况下ServiceBroadcastReceiver都在此线程中运行。您可能需要查看the official Android doc

关于整体设计,如果传入短信的数量非常大,我建议每隔5分钟批量上传一次。将所有消息放入队列中,服务每5分钟读取一次队列并上传其内容。这样可以节省大量开销(CPU,内存,带宽,时间),也许你可以跟上数据传输的比例。

请记住,SMS比TCP通信更轻量级,因此如果您的设备确实连续接收短信,您可能会遇到写入速度跟不上的情况。阅读速度,最终使CPU匮乏并杀死你的系统。