And*_*Dev 14 performance android listview background redraw
我有一个后台线程加载数据,我想在Android ListView中显示.数据经常变化(即每秒1-2次).有时,数据集中的行数也会发生变化(但肯定不会像单元格中的数据那样频繁变化).
据我所知,有两种方法可以更新单元格中的数据:
让后台线程通知UI线程新数据准备就绪,然后UI线程可以调用BaseAdapter.notifyDataSetChanged().但是,我在不止一个地方读过,如果经常调用该方法,它会很慢,因为ListView必须重新构建其所有子视图Views.
如果数据集计数未更改,我可能会找到与更改的数据关联的所有可见ListView单元格,并手动更新值而不调用notifyDataSetChanged().这可能会有效,但我认为不幸的是,当我通知List List适配器应该为我处理更新通知和机制时,我必须手动更新视图.如果数据集计数随时间变化(即不仅ListView的每个单元格内的数据发生变化,而且ListView中的单元格总数可以根据提供实时数据的后台线程增长或缩小,此方法也不起作用).
我当然会感谢其他已实现此方案的人的想法,以及他们如何优化代码简单性,最重要的是性能.
我进行了实验ListView,如果您有实时数据并且希望以更好的性能进行更新,那么您必须ListView手动更新单元格而无需调用. notifyDataSetChanged()ListView
notifyDataSetChanged()如果你经常调用它(即每秒一次),导致ListView重建它的整个View层次结构非常慢.
注(2014).如果您使用具有ViewHolder模式的普通现代ListView,则此操作不适用.你只需要调用'notifyDataSetChanged',这就是它的全部内容.由于Android知道仅更新屏幕上的单元格,因此效率非常高.
我实现了一个方案,如果我的数据集大小从一个更新改变到下一个更新,我打电话notifyDataSetChanged().如果数据集大小从一次更新到下一次更新保持不变(这样,ListView当需要重绘数据时,单元格的数量与以前相同),那么我遍历ListView.getFirstVisiblePosition():getLastVisiblePosition(),并仅更新可见单元格.
| 归档时间: |
|
| 查看次数: |
20633 次 |
| 最近记录: |