Thanks for sharing experience with EventWrapper :)
With regards to frequent UI updates on little things, I rely on DiffUtil to ensure RecyclerView is performant.
In case the ViewState object is too big. I think would split the View into multiple views with multiple ViewModels (and their own ViewState output stream of course).
But then again I’d rethink the data fetching strategy, whether from remote server or local database. Perhaps it’s not a good idea to fetch too much data in 1 go and we should break it down or load things lazily