Вот мое понимание вашей проблемы. У вас есть большой список данных, и в какой-то момент он станет недействительным. Чтобы снова сделать его действительным, вы должны выполнить некоторую обработку, прежде чем сможете перекрасить таблицу.
Если это правильно, вот несколько вариантов.
1) Двойной буфер ваших данных. Пока вы отображаете что-то, что было «правильно», пользователь может нормально взаимодействовать с ним. Когда вы получите триггер для обработки данных, работайте с ним в фоновом режиме с копией, а когда он будет готов полностью перерисовать, обновите. Это обновление может быть резким и большим, но отображаемые данные всегда будут правильными или, по крайней мере, нормальными, а пользовательский интерфейс продолжает работать и не пугает пользователя.
Это в значительной степени устраняет проблему с многопоточностью, поскольку уведомления не изменяют данные и не пытаются отображать их одновременно.
AFAIK, приложение Facebook, похоже, делает это, также как и TwitterFon. По крайней мере, так оно и есть. Трудно сказать наверняка.
2) Загрузочный экран! Не весело, но это работает. Если вы знаете, что данные неверны, откройте полупрозрачную панель и попросите пользователя немного повиснуть.
Это действительно сводится к обновлению сейчас или позже. Вы должны решить, какие компромиссы наиболее целесообразны в вашем приложении.