2

我们有某种类型的应用程序通过 Socket 与服务器连接。服务器通常会发送一些订单(添加订单、更新订单和删除订单)。服务器每秒发送更多的 20 个请求。根据对 Android 客户端的这些请求,我们必须更改 ListView 适配器。我们正在这样做,但是我们有大量的 CPU 负载。

你认为这个问题的根源是什么?

ListView 使用 ViewHolder 实现。我们不知道在哪里测量时间以及如何定义这个特定应用程序的瓶颈。我们试图测量请求的分配 - 没关系。我们还测量视图通知。看来也不能慢。然后通过 View.post() 触发 View。也许要查看的 MessageQueue 太长了?

编辑:即使我们当前不在 ListView 中,CPU 负载也很大(我们没有看到它)

4

2 回答 2

1

您可以参考Romain Guy(主要的 Android 框架工程师之一)撰写的这篇精彩的博客文章,其中展示了如何使用多种优化工具。显示的大多数工具已经包含在 SDK 中,并且可以非常精确地测量以毫秒为单位的时间等。

对任何 android 开发者都非常有用的读物

编辑:

这里只是一个疯狂的猜测,考虑到你的描述,也许CPU负载来自移动设备必须处理所有信息,即使信息与它无关(你说根据请求,你改变适配器)为什么不让服务器检查这些数据,然后只向设备发送实际使用的数据?

于 2012-12-27T10:16:42.583 回答
0

嗯,每秒 20 个请求对于移动设备本身(不仅仅是ListView)来说是一项繁重的任务。

ListView每次添加内容时都会重新加载所有内容,因此如果您在列表底部添加新项目,那么最好仅在用户到达列表的最后一项时才加载新项目。

如果您在列表顶部添加新项目,那么ListView它并不真正适合您的目的。考虑创建自己的视图并为onLayout方法提供不同的实现。

编辑

此外,考虑使用某种缓冲区,它将保存累积信息,然后将其刷新到 UI 线程(而不是将每个请求都发布到 UI 线程)。

于 2012-12-27T10:03:53.813 回答