我们有某种类型的应用程序通过Socket与服务器连接。服务器通常会发送一些订单(添加订单,更新订单和删除)。服务器每秒发送20个以上的请求。根据对Android客户端的请求,我们必须更改ListView适配器。我们正在这样做,但是我们有很大的CPU负载。
您认为这个问题的根源是什么?
使用ViewHolder实现的ListView。我们不知道在哪里测量时间以及我们如何定义这个特定应用程序的瓶颈。我们试图测量请求的分配 - 这没关系。我们还测量视图通知。看来它也不会减速。然后通过View.post()查看视图。也许MessageQueue to View太长了?
编辑:即使我们目前不在ListView中,CPU负载也很大(我们没有看到它)
答案 0 :(得分:1)
您可以参考this amazing blog post made by Romain Guy(主要的Android Framework工程师之一)来展示如何使用多种优化工具。显示的大多数工具已经包含在SDK中,并且以毫秒为单位测量相当精确的内容等等。
任何Android开发人员的非常有用的阅读
修改强>
这里只是一个疯狂的猜测,考虑到你的描述,也许来自移动设备的CPU负载必须处理所有信息,即使信息与它无关(你说根据请求,你改变了适配器) )为什么不让服务器检查这些数据,只发送给设备实际使用的是什么?
答案 1 :(得分:0)
嗯,每秒20个请求对于移动设备本身来说是一项繁重的任务(不只是ListView
)。
ListView
每次添加内容时都会重新加载所有内容,因此如果您在列表底部添加新项目,那么最好只在用户到达列表的最后一项时加载新项目。
如果您要在列表顶部添加新项目,则ListView
并不适合您的目的。请考虑创建自己的视图,并为onLayout
方法提供不同的实现。
修改强>
另外,考虑使用某种缓冲区,它将保存累积信息,然后将其刷新到UI线程(而不是将每个请求发布到UI线程)。