Похоже, что когда элемент становится доступным, вы обновляете адаптер списка из рабочего потока в AsyncTask. Тот же адаптер используется в потоке пользовательского интерфейса для отображения списка. Это может привести к случайным сбоям, поскольку вы, возможно, обновляете адаптер списка для следующего элемента, пока он все еще отвечает на более раннюю notifyDataSetChanged()
.
Лучший способ обновить адаптер списка - использовать обработчик для публикации исполняемого файла в потоке пользовательского интерфейса, который обновит адаптер списка и вызовет notifyDataSetChanged()
.
При обновлении изображения может происходить похожая вещь.
Как общая стратегия, любая структура данных, от которой зависит пользовательский интерфейс, должна обновляться в потоке пользовательского интерфейса. Это имеет тенденцию быть более безопасным вокруг. Альтернативная стратегия состоит в том, чтобы тщательно синхронизировать критические участки кода, но сделать это гораздо сложнее.