У меня есть данные загрузки потока фона, которые я хочу отобразить в Android ListView. Данные очень часто меняются (т.е. 1-2 раза в секунду). Иногда количество строк в наборе данных также изменяется (но, конечно, не так часто, как меняются данные в ячейках).
Есть два способа обновить данные в ячейках, насколько я могу судить:
-
Если фоновый поток уведомляет поток пользовательского интерфейса, что новые данные готовы, а поток пользовательского интерфейса может затем вызвать BaseAdapter.notifyDataSetChanged(). Тем не менее, я читал в нескольких местах, что, если этот метод вызывается часто, он будет медленным, потому что ListView должен реструктурировать все его представления в виде представлений.
-
Если количество наборов данных не изменилось, я мог бы найти все видимые ячейки ListView, связанные с измененными данными, и обновить значения вручную без вызова notifyDataSetChanged(). Возможно, это сработает, но я думаю, что, к сожалению, мне приходится обновлять представления вручную, когда адаптер списка должен обрабатывать уведомления и механизмы обновления для меня, когда я уведомляю об этом. Этот метод также не будет работать, если счет набора данных изменяется со временем (т.е. Не только данные в каждой ячейке ListView изменяются, но общее количество ячеек в ListView может увеличиваться или сокращаться на основе потока фона, предоставляющего данные в реальном времени).
Я, конечно же, буду благодарен за мысли от других, которые внедрили этот сценарий, и как они оптимизировали простоту кода и, самое главное, производительность.