What if we made the tab bar show the last 4 recently used items, plus "other" to open a drawer to show everything else? But if one of the top 4 is selected, it doesn't move within the list, it stays where it is.
That's what I mean by not moving an item if it's already in the top 4. Do most people use all of the features of any given app? I can see things like news sites being able to get by with this, as I suspect the general use case with news sites is to only have a few sections one cares about.
Or maybe it's a Markov chain! Move an item in the list by a random proportion weighted by how frequently that item has been used in the past! Infrequently used items have a low probability of making it into the most-recently-used list, where they would supplant more frequently used items.
Or more direct: just always sort items by how frequently they've been use over time, but never allow the top 4 to be rearranged, even if one of the "lower" items gets used more.
Or more simple: just let the user choose which items they want to pin to the front view.